我有一个引用Office类型库IFoo
的接口MSO.DLL
。我希望在编译IDL时为我的接口生成代理/存根代码(dlldata.c
)。据我了解,为了使midl.exe生成代理/存根代码,必须在我的IDL的根级别声明接口。但是,importlib
语句只能在library
块内。因此,在编译Office._CustomXMLParts
时,尝试引用(IFoo
)的类型I不存在。有没有办法解决这个问题,除了自定义代理/存根实现或使用IDispatch
而不是完整的引用类型?
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(02F84D34-91DB-400B-94C9-71ABCD6F077D),
version(1.0),
nonextensible,
pointer_default(unique),
oleautomation,
dual
]
interface IFoo : IDispatch
{
[id(0x461A47A4)] HRESULT Bar([in] Office._CustomXMLParts* customXmlParts);
};
[
uuid(CC76135E-FA22-4437-8719-3FFADE38D72B),
version(1.0)
]
library FooLib
{
importlib("stdole2.tlb");
importlib("mso.dll");
interface IFoo;
}
我收到的错误是:
error MIDL2025: syntax error : expecting a type specification near "Office"
我尝试将接口定义移到library
块下面,但是我得到了一个不同的错误。
error MIDL2009: undefined symbol : _CustomXMLParts [ Parameter 'customXmlParts' of Procedure 'Bar' ]