次の方法で共有


COM のイベント

このトピックでは、コネクション ポイントの概要を説明し、COM のイベントを記述するために一般に使用されるイベントに関する専門用語を説明します。

コネクション ポイントは、COM のクライアントとサーバーの間の双方向通信を確立します。 この機構を使用すると、何かのイベントが発生したときに、COM のサーバーからクライアントをコールバックできます。 たとえば、サーバー (Microsoft Internet Explorer など) は、イベントを発生させて、タイトルの変更のような変更をクライアント プログラムに報告できます。 クライアントは、イベント シンクと呼ばれる内部 COM オブジェクトを作成して、通知の受信に備えます。 通知を受信すると、クライアントはそのイベントに関連付けられているアクションを実行できます。

イベント シンクは、イベントに関連付けられているメソッドをサーバーに公開するためのインターフェイスを提供します。 サーバーは、それらのイベントに関連付けられているメソッドを呼び出して、イベントを発生させます。 クライアントは、イベント シンク インターフェイスを通常の COM インターフェイスとして実装します。 サーバーは、そのインターフェイスをアウトゴーイング インターフェイスとして宣言します。つまり、COM サーバーの作成者は、COM サーバーのタイプ ライブラリ内のインターフェイスに source 属性を適用します。 サーバーは、イベント シンク インターフェイスの定義を使用して、sink メソッドと invoke メソッドを識別します。

イベント シンク インターフェイスを実装する COM クライアントは、しばしばイベント シンク、または単純にシンクと呼ばれます。 次の図では、シンクは、ISinkEvents インターフェイスを実装しています。 イベントを発生させるサーバーは、ソースと呼ばれます。

コネクション ポイント イベント モデル

COM イベント

イベント シンク インターフェイスを確立した後、シンクをソースに接続する必要があります。 コネクション ポイント機構は、次のプロトコルを使用してシンクとソースを接続します。

  1. シンクがサーバー オブジェクトに IConnectionPointContainer インターフェイスについて照会します。 サーバー オブジェクトがコネクション ポイントをサポートしている場合は、サーバー オブジェクトがポインターを返します。

  2. シンクは、コンテナー オブジェクトのメソッドを使用して、特定のコネクション ポイントを表す IConnectionPoint インターフェイスの場所を特定します。 サーバーは複数のアウトゴーイング インターフェイスをサポートできるので、クライアントはそのシンクを特定のコネクション ポイント インターフェイスのインターフェイス ID (IID) と結び付ける必要があります。

  3. 正しいコネクション ポイント オブジェクトを取得すると、シンクは IConnectionPoint::Advise を呼び出して、そのシンク インターフェイス ポインターを登録します。 サーバー (ソース) は、クライアントが IConnectionPoint::Unadvise を呼び出して切断するまで、その接続を保持し、クライアントに対してイベントを発生させます。

Visual Basic では、コネクション ポイントの詳細の大部分が隠ぺいされていますが、サーバーのクライアントの宣言に WithEvents ディレクティブを含める必要があります。 C++ では、クライアント コードで、IConnectionPointContainer および IConnectionPoint のメソッドについて照会し、呼び出す必要があります。 サーバーはこの両方のインターフェイスをサポートします。

参照

処理手順

方法: COM シンクによって処理されるイベントを発生させる

方法: COM ソースによって発生したイベントを処理する

その他の技術情報

マネージ イベントとアンマネージ イベント