特定の関数呼び出しを C# に移植したいと考えています。2 行は次のとおりです。
m_pBrowserApp->get_Document(&pVoid);
m_pLayoutAnalyzer->Analyze4(pVoid, _variant_t(5L));
m_pBrowserApp
は ActiveX ブラウザー オブジェクトでpVoid
あり、そのドキュメント プロパティです。を呼び出すことで取得できますWebBrowserBase.ActiveXInstance.Document
。_variant_t(5L)
ただし、 C# でa を作成する方法がわかりません。呼び出しは 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 プロパティが有効であると確信しています。したがって、問題は残ります:相互運用性を介して、バリアントに包まれた long を適切に渡すにはどうすればよいですか?