2010-09-10 86 views
1

我的一個COM接口方法需要如下用戶定義類型的參數:如何在COM接口定義中指定用戶定義的類型參數?

[uuid(58ADDA77-274B-4B2D-B8A6-CAB5A3907AE7), object] //Interface 
interface IRadio : IUnknown 
{ 
     ... 
    HRESULT test_method2(someUDT* p2p_UDT); 
     ... 
}; 

怎麼能適應someUDT的定義在* .idl文件? someUDT類型是用戶定義的結構。

謝謝。

回答

1

也許this幫助你 - 這是德國人,但最有趣的部分是代碼。

這是一個結構是如何定義的有:

[ 
    uuid(62D33614-1860-11d3-9954-10C0D6000000), 
    version(1.0) 
] 
typedef struct TPerson 
{ 
    BSTR bstrFirstname; 
    BSTR bstrLastname; 
    long lAge; 
    TDepartment Dep; 
} TPerson; 
// Interface 

這是怎麼回事以後使用:

[ 
    object, 
    uuid(FC126BCD-1EAC-11D3-996A-4C1671000000), 
    dual, 
    helpstring("ICMyUDT Interface"), 
    pointer_default(unique) 
] 
interface ICMyUDT : IDispatch 
{ 
    [id(1), helpstring("method PassUdtByRef")] HRESULT 
     PassUdtByRef([ref, in, out] TPerson* pPerson); 
    [id(2), helpstring("method ReturnUdt")] HRESULT ReturnUdt( 
     [out, retval] TPerson* pPerson); 
    [id(3), helpstring("method PassUdtByVal")] HRESULT 
     PassUdtByVal([in] VARIANT varPerson); 
}; 
+0

非常感謝,大衛。 :) – smwikipedia 2010-09-10 14:57:23

0

我認爲你需要在idl文件中定義結構。喜歡的東西:

[ 
    uuid("..."), 
    v1_enum, 
    helpstring("Enum") 
] 
typedef enum MyEnum { 
    value_a, 
    value_b, 
    value_c 
} MyEnum_t; 
+0

我想它。但現在沒有成功。你可以舉一個關於結構的例子嗎?謝謝。 – smwikipedia 2010-09-10 06:05:29

+0

我試着用我的結構,但出現以下警告:警告MIDL2368:錯誤生成類型庫,被忽略:無法設置UUID:_someUDT(0x800288C6) – smwikipedia 2010-09-10 06:11:51

+0

謝謝阿德里安。問題解決了。 :) – smwikipedia 2010-09-10 14:57:41

相關問題