IDispEventImpl のサポート

テンプレート クラスIDispEventImplを ATL COM オブジェクトのコネクション ポイントのサポートを提供するために使用できます。接続ポイントでは、外部の COM オブジェクトから発生したイベントを処理する COM オブジェクトことができます。これらのコネクション ポイントと、COM オブジェクトによって提供されるイベント シンク マップ、マップします。

接続ポイントまたはポイントは、COM オブジェクトを正しく実装するには、次の手順を完了する必要があります。:

この手順では、あなただけのヘッダー ファイル (.h)、COM クラスを変更するでしょう。

タイプ ライブラリのインポート

イベントを処理する外部オブジェクトごとに、タイプ ライブラリをインポートする必要があります。この手順処理できるイベントを定義し、イベント シンク マップを宣言するときに使用される情報を提供します。#Importディレクティブは、これを達成するために使用できます。COM クラスのヘッダー ファイル (.h)、サポートする各ディスパッチ インターフェイスの必要な#importディレクティブの行を追加します。

次の例は、外部の COM サーバーのタイプ ライブラリをインポート ( MyServer ):

 #import」D:\MyServer.dll「raw_interfaces_only、no_namespace、named_guids

注特価;別の#importステートメント サポートする各外部ディスパッチ インターフェイスが必要(&N)。

インターフェイスの宣言

各ディスパッチ インターフェイスのタイプ ライブラリをインポートした後で、外部ディスパッチ インターフェイスごとにIDispEventImplインターフェイスを宣言する必要があります。各外部オブジェクトのIDispEventImplインターフェイス宣言を追加することによって、COM クラスの宣言を変更します。パラメーターの詳細についてを参照してくださいIDispEventImpl。

次のコード行、カスタムのための 2 つのコネクション ポイントの宣言 IExtEvents1 と IExtEvents2 のクラスによって実装された COM オブジェクトのインターフェイスCMyObj:

パブリック IDispEventImpllt; 0、された、& DIID__IExtEvents1& LIBID_EXTEVENTS1Lib、1、0 >、パブリック IDispEventImpl < 1、された、& DIID__IExtEvents2、& LIBID_EXTEVENTS2Lib、1、0 & gt

イベント シンク マップを宣言します。

イベント通知を正しい関数で処理するために、COM オブジェクトは、各イベントを正しいハンドラーにルーティングする必要があります。これは、イベント シンク マップを宣言することによって達成されます。

ATL には、いくつかのマクロ、 BEGIN_SINK_MAP、 END_SINK_MAP、およびこのマッピングが容易SINK_ENTRY、提供しています。標準の形式は次のとおりです。:

BEGIN_SINK_MAP(comClass)特価;SINK_ENTRY (id、dispid、func)...//additional 外部イベント エントリEND_SINK_MAP()(&N)

次に、2 つのイベント ハンドラーをイベント シンク マップを宣言します。:

BEGIN_SINK_MAP(CMyObj)SINK_ENTRY (0、Events1、OnClick1)SINK_ENTRY (0、Events2、OnClick2)END_SINK_MAP()

実装はほぼ完了です。最後のステップと、外部インターフェイスのアドバイズ中止を行います懸念。

アドバイスと IDispEventImpl インターフェイスのアドバイズ

最後の手順、適切なタイミングで助言アドバイズすべての接続ポイント (する) メソッドを実装することです。外部のクライアントとオブジェクト間の通信が行われる前に、このアドバイスを行う必要があります。オブジェクトが表示される前に、オブジェクトでサポートされている各外部ディスパッチ インターフェイスに対して、アウトゴーイング インターフェイスが照会されます。接続が確立され、アウトゴーイング インターフェイスへの参照、コントロールからのイベントを処理するために使用されます。このプロシージャを"アドバイズ「呼びます

外部インターフェイスがオブジェクトの完了後、アウトゴーイング インターフェイスは、COM オブジェクトが使用されなくことを通知します。このプロセスを"アドバイズ中止します「呼びます

COM オブジェクトの固有の性質のため、この手順、詳細と実行方法は実装間で異なります。これらの詳細はこのトピックの範囲を超えています、ない宛て。

Index