2012-02-24 142 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