0

私はこのスレッドを使用してメソッドを JS に正常に公開したこの BHO を持っています: Calling BHO method from Javascript? .

HTML ドキュメントをホストするために CAxWindow を開くときに、このエクスポートされたメソッドを使用したいのですが、そのウィンドウでも機能しないようです。

次のようなカスタムクラスを作成しようとしました:

class Bubble: 
public CAxWindow, 
public IDispEventImpl<1, Bubble, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 0>
{
public:

    BEGIN_SINK_MAP(Bubble)
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE , OnDocumentComplete) 
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE , OnDownloadComplete)
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, OnQuit)
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, NavigateError)           
        SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2 , OnNavigateComplete2)
    END_SINK_MAP()

ドキュメントのメソッドを公開するプロセスを繰り返してみますが、イベントが発生していないようです。

したがって、基本的に私の質問は次のとおりです。CAxWindow でメソッドを js に公開する方法はありますか?

どうもありがとう!

4

1 に答える 1

1

IDispEventImplイベント メソッドの呼び出しを処理するためのシンク インターフェイスを実装します。独自の追加メソッドで直接拡張することはできません。さらに、このインターフェイスはスクリプト エンジンではなく ActiveX コントロール サイトに接続されているため、JavaScript は実際にはスクリプト コードからこのインターフェイスを認識しません。接続ポイント シンク インターフェイスでのイベント呼び出しに適した、COM インターフェイスIDispEventImplの単純化された実装であり、参照カウンターはありません。IDispatchIDispatch::Invoke

インターフェイスを使用してタイプ ライブラリ対応の COM オブジェクトを実装するかIDispatch(タイプ ライブラリは、実際のメソッドを検出するためにスクリプト エンジンによって使用されます)、またはカスタムIDispatchまたはインターフェイスの実装 (はい、これは追加の基本クラス/インターフェイスとしてクラスにIDispatchEx直接実装できます) の処理が必要です。CAxWindowタイプ ライブラリを使用しないメソッド名の解決。次に、このオブジェクトをexternalオブジェクトまたはその他の方法でスクリプト エンジンに渡します。

于 2013-10-01T06:24:18.340 に答える