如何在COM接口定义中指定用户定义的类型参数?
我的一个COM接口方法需要如下用户定义类型的参数:如何在COM接口定义中指定用户定义的类型参数?
[uuid(58ADDA77-274B-4B2D-B8A6-CAB5A3907AE7), object] //Interface
interface IRadio : IUnknown
{
...
HRESULT test_method2(someUDT* p2p_UDT);
...
};
怎么能适应someUDT的定义在* .idl文件? someUDT类型是用户定义的结构。
谢谢。
也许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);
};
我认为你需要在idl文件中定义结构。喜欢的东西:
[
uuid("..."),
v1_enum,
helpstring("Enum")
]
typedef enum MyEnum {
value_a,
value_b,
value_c
} MyEnum_t;
我想它。但现在没有成功。你可以举一个关于结构的例子吗?谢谢。 – smwikipedia 2010-09-10 06:05:29
我试着用我的结构,但出现以下警告:警告MIDL2368:错误生成类型库,被忽略:无法设置UUID:_someUDT(0x800288C6) – smwikipedia 2010-09-10 06:11:51
谢谢阿德里安。问题解决了。 :) – smwikipedia 2010-09-10 14:57:41
非常感谢,大卫。 :) – smwikipedia 2010-09-10 14:57:23