6

のMSDNドキュメントには、オブジェクトaddEventListenerの形式でコールバック関数を受け入れると書かれています。IDispatch *C# (私は COM 相互運用機能を使用しています) から、Visual Studio はパラメーターの型を単に として表示しますobject

インターフェイスなどを探しましたが、IEventListener見つかりませんでした。何を渡せばいいですか?

4

1 に答える 1

5

調べてみると、これらの COM 接続ポイント (イベント ハンドラー) は で指定されていることがわかりましたDispId(0)。コールバック関数は、次のようなクラスのインスタンスによって表されます。

// These attributes may be optional, depending on the project configuration.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class EventListener
{
    [DispId(0)]
    // The "target" parameter is an implementation detail.
    public void NameDoesNotMatter(object target, IDOMEvent evt) { ... }
}

呼び出すデフォルトのメソッドを指定するためDispId(0)、メソッドの実際の名前は重要ではありません。ただし、メソッドのパラメーターは確かに重要です。たとえば、 にIHTMLElement.onclickは引数のないコールバックを割り当てる必要がありますが、IHTMLElement2.attachEventは型IHTMLEventObj(またはIHTMLEventObj2、...、6、または のみ) の 1 つのパラメーターを持つコールバックを受け取りますobject

要約すると、COMIDispatchコールバックは、正しい引数を受け取り、注釈が付けられたメソッドを持つ COM 可視クラスを使用して、C# で実装できます[DispId(0)]


これらすべてにもかかわらず、ブラウザーが互換性のために下位ドキュメント モードを使用している場合、IE9 DOM オブジェクトはこのメソッドをサポートしないため、W3C DOM Events API を回避するソリューションがより適切である可能性があります。たとえば、 を使用する拡張機能addEventListenerは、IE7 モードでレンダリングされる Bing などのページでは失敗します。

IWebBrowser2また、F12 開発者ツールを使用して手動で行う以外に、インスタンスで使用されるドキュメント モードを設定することもできないようです。

于 2011-02-15T21:31:15.433 に答える