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
오전 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
'KB > MFC/Win32' 카테고리의 다른 글
USES_COMVERSION (1) | 2004.03.19 |
---|---|
[com] _main이 없다며 unresolved fatal linking error가 날때 (0) | 2004.03.19 |
[com] atlcom control 에서 Windowless 경우에서도 hWnd 가져 오기 (0) | 2004.03.19 |
[com] IUnkouwn 선택 (0) | 2004.03.19 |
ATL 메소드와 클래스 메소드가 같을경우 버그 (0) | 2004.03.19 |