COM中的IDL语言的难点之接口指针
发布日期:2021-07-14 20:03:19 浏览次数:6 分类:技术文章

本文共 1933 字,大约阅读时间需要 6 分钟。

IDL前置声明语法::

SOLVED

Add a forward declaration - at the TOP of IDL file:

  • import "ocidl.idl";
  • interface S8SimObject;
  • 标准的格式:同时放在OICF中和类型库中
import "oaidl.idl";import "ocidl.idl";import "unknwn.idl";interface IX3;	[		uuid(3E0B4B4D-14D0-4545-83D5-4C32B80E1FDB),	]	interface IX4 : IUnknown	{		HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX3**  pret);	}	[		uuid(AF49EC6D-01F9-4ada-A49D-D0082883EE7B),	]	// {AF49EC6D-01F9-4ada-A49D-D0082883EE7B}	interface IX3 : IUnknown	{		HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX4** pret);	}[	uuid(CA3B37EA-E44A-49b8-9729-6E9222CAE844),	version(1.0),	helpstring("MATHCOM 1.0 Type Library")]library MATHCOMLib{	interface IX3;	interface IX4;};

 

import "oaidl.idl";import "ocidl.idl";import "unknwn.idl";interface IX3;[	uuid(3E0B4B4D-14D0-4545-83D5-4C32B80E1FDB),]interface IX4 : IUnknown{	HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX3** const pret);}[	uuid(AF49EC6D-01F9-4ada-A49D-D0082883EE7B),]// {AF49EC6D-01F9-4ada-A49D-D0082883EE7B}interface IX3 : IUnknown{	HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX4** pret);}

在这个例子中,error MIDL2284 : [out] interface pointers must use double indirection : [ Parameter 'pret' of Procedure 'Minus' ( Interface 'IX3' ) ] 的错误得到解决。原因是必须用IX4**代替IX4* ,而普通的指针不需要二级指针,只有接口指针必须是二级间接寻址。如int*就可以编译通过

 

另外下面的代码强制放入类型库中。其实只需要在类型库中加上一个声明就可以放入 interface S8SimObject;

import "oaidl.idl";import "ocidl.idl";import "unknwn.idl";[	uuid(CA3B37EA-E44A-49b8-9729-6E9222CAE844),	version(1.0),	helpstring("MATHCOM 1.0 Type Library")]library MATHCOMLib{	interface IX3;	[		uuid(3E0B4B4D-14D0-4545-83D5-4C32B80E1FDB),	]	interface IX4 : IUnknown	{		HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX3**  pret);	}	[		uuid(AF49EC6D-01F9-4ada-A49D-D0082883EE7B),	]	// {AF49EC6D-01F9-4ada-A49D-D0082883EE7B}	interface IX3 : IUnknown	{		HRESULT Minus([in]int nValue1, [in]int nValue2, [out, retval]IX4** pret);	}};

 

转载地址:https://blog.csdn.net/daojin505/article/details/76811966 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MFC多线程编程
下一篇:COM技术内幕

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月13日 04时33分22秒