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); } };
