如何从为代理/存根生成定义的接口引用外部类型库

时间:2016-11-22 16:33:14

标签: com idl office-automation midl typelib

我有一个引用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'  ]

0 个答案:

没有答案