2012-02-24 100 views
0

我有一个C++库(Win32),它填充了我想从.NET(IE工具栏)使用的网页中的一些字段,但我无法弄清楚如何通过COM公开该方法。我已经知道我应该在.idl文件将其添加到界面是这样的:如何将C++类型的参数类型为IHTMLDocument *的方法暴露给COM?

interface IPlugin : IDispatch{ 
    #include <mshtml.h> 
    HRESULT FillFields(IHTMLDocument2* pDocument, BSTR value1, BSTR value2); 
}; 

但mshtml.h的的#include给了我以下错误:

error MIDL2003: redefinition : _LARGE_INTEGER 
error MIDL2003: redefinition : _ULARGE_INTEGER 
error MIDL2003: redefinition : INT 
error MIDL2003: redefinition : Int64ShllMod32 

有什么办法我可以将C#中的IHTMLDocument对象传递给C++并在C++中修改它的内容,或者COM应该仅用于自动化类型,如BSTR?

感谢

+2

尝试在''interface'之外移动'#include'。 – spencercw 2012-02-24 11:16:28

+0

@spencercw我想我只能在界面之外导入其他.idls,因为如果我试图包含.h,就会得到这个错误:'error MIDL2025:syntax error:expect a interface name or DispatchInterfaceName or CoclassName or ModuleName or LibraryName or ContractName或类型规范附近“pragmawarning(禁用:4049)文件:mshtmlc.h' – Andrei 2012-02-24 11:24:19

回答

1

你会使用#import得到的IHTMLDocument2的IDL定义为范围,MIDL。

MIDL编译器将为您生成#include。在MIDL文件中明确#include仅在非常狭窄的一组角落情况下才有用。

+0

'import”mshtml.idl“;'** **'import”ocidl.idl“;''确实是解决方案,谢谢 – Andrei 2012-02-24 12:21:40