ATLCOM에서 Enum 형태의 인자를 쓰기
오전 11:34 2000/09/20
조경민
--------------------------------------------------------
idl에서


// TestCOMEnumValue.idl : IDL source for TestCOMEnumValue.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (TestCOMEnumValue.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

// ENUM 타입에 대한 uuid가 있어야 유니크한 타입이 될수 있다.
// 다음은 testCOMEnum의 Enum타입 선언이다.
typedef [uuid(39FB3AB1-DE17-4a10-A3DB-95236C055135),
helpstring("testCOMEnum Attribute")]
enum testCOMEnum
{
        bro = 0,
        greendew,
        light
}TestCOMEnum;


        [
                object,
                uuid(C1C416AB-19C2-41A9-A71C-18080C88F0B0),
                dual,
                helpstring("ITest Interface"),
                pointer_default(unique)
        ]
        interface ITest : IDispatch
        {
// Enum타입을 그대로 쓰면 된다.
                [id(1), helpstring("method fnMethod")] HRESULT fnMethod([in] TestCOMEnum In , [out,retval] TestCOMEnum* pOut);

        };


[
        uuid(8EB13473-6C93-41D0-81DD-8C20454391D8),
        version(1.0),
        helpstring("TestCOMEnumValue 1.0 Type Library")
]
library TESTCOMENUMVALUELib
{
        importlib("stdole32.tlb");
        importlib("stdole2.tlb");

// Enum타입을 쓰겠다고 선언한다.
        enum TestCOMEnum;

        [
                uuid(AC1C6333-C4E0-4FE1-A40D-306B87758ABF),
                helpstring("Test Class")
        ]
        coclass Test
        {
                [default] interface ITest;
        };
};


실제 쓰는 부

STDMETHODIMP CTest::fnMethod(TestCOMEnum In, TestCOMEnum *pOut)
{
        // TODO: Add your implementation code here

        if( In == bro )
                MessageBox( NULL, "bro selected","enum", MB_OK);
        else
        if( In == greendew )
                MessageBox( NULL, "greendew...", "enum", MB_OK);
        else
        if( In == light )
                MessageBox( NULL, "light", "enum", MB_OK);

        *pOut = bro;

        return S_OK;
}


비주얼 베이직에서
라이브러리 참조 후

Private Sub Command1_Click()
    Dim obj As New TESTCOMENUMVALUELib.Test
    Dim x As testCOMEnum                // 인텔리센스 가능
    x = obj.fnMethod(greendew)          // Enum 선택 콤보 인텔리 센스 나옴
    MsgBox x
End Sub

+ Recent posts