我想将某个函数调用移植到 C#。这两行如下:
m_pBrowserApp->get_Document(&pVoid);
m_pLayoutAnalyzer->Analyze4(pVoid, _variant_t(5L));
m_pBrowserApp
是 ActiveX 浏览器对象并且pVoid
是它的文档属性。我可以通过调用得到WebBrowserBase.ActiveXInstance.Document
。但是,我不知道如何_variant_t(5L)
在 C# 中创建一个。由于调用不是 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 属性是有效的。所以问题仍然存在:如何通过互操作正确传递一个长包装的变体?