2010-09-10 94 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

相关问题