1

特定の関数呼び出しを 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 を適切に渡すにはどうすればよいですか?

4

1 に答える 1