我想将某个函数调用移植到C#。这两条线分别为:如何使用_variant_t参数(类型“long”)调用COM函数?
m_pBrowserApp->get_Document(&pVoid);
m_pLayoutAnalyzer->Analyze4(pVoid, _variant_t(5L));
m_pBrowserApp
是ActiveX浏览器对象和pVoid
是其文档属性。我可以致电WebBrowserBase.ActiveXInstance.Document
。但是,我不知道如何在C#中创建_variant_t(5L)
。由于呼叫不是VT_BYREF,因此通过这样调用它应该“正常工作”:
ILayoutAnalyzer2 vips = new LayoutAnalyzer2();
vips.Initialize(0);
SHDocVw.WebBrowser_V1 axBrowser = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
var doc = axBrowser.Document as mshtml.HTMLDocument;
vips.Analyze4(doc, (Object)5L); // fails with HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)
但它没有。它失败,出现DISP_E_TYPEMISMATCH
错误。 我很确定Document属性是有效的。所以问题仍然存在:如何通过interop正确传递一个长变量?
你有没有试过'vips.Analyze4(doc,5L);'?将其转换为对象应该会导致“VT_BYREF |”据我所知,VT_UNKNOWN'。所以它必须失败... – Carsten
我有。 [同样的结果。](http://i.snag.gy/7LfV9.jpg) –
就是这样!精彩!你可以再次发布这个答案,以便我可以标记它,@HansPassant? –