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