Share via


COM オブジェクトと接続可能オブジェクトのイベント

プログラムは、発生した問題を検出すると、クライアントに通知できます。 たとえば、株価表示プログラムが株式の価格の変化を検出すると、すべてのクライアントにその変化を通知できます。 この通知プロセスは、イベントの発生と呼ばれます。

COM を使用すると、サーバー オブジェクトは、どのオブジェクトが通知されるかについての情報がなくても、COM イベントを使用してイベントを起動できます。 オブジェクトは、接続可能なオブジェクトを使用して、通知を要求したクライアントに関する詳細情報を維持することもできます。

COM 接続可能なオブジェクトは、受信インターフェイスに加えて送信インターフェイスをクライアントに提供します。 その結果、オブジェクトとそのクライアントは双方向通信を行うことができます。 受信インターフェイスはオブジェクトに実装され、オブジェクトの外部クライアントからの呼び出しを受信します。一方、送信インターフェイスはクライアントのシンクに実装され、オブジェクトからの呼び出しを受信します。 オブジェクトは使用するインターフェイスを定義し、クライアントはそれを実装します。

オブジェクトは、その受信インターフェイスを定義し、これらのインターフェイスを実装します。 受信インターフェイスは、オブジェクトの IUnknown::QueryInterface メソッドを使用してクライアントで使用できます。 クライアントはオブジェクトの受信インターフェイスのメソッドを呼び出し、オブジェクトはクライアントに代わって必要なアクションを実行します。

送信インターフェイスもオブジェクトによって定義されますが、クライアントは、クライアントが作成するシンク オブジェクト上に送信インターフェイスを実装します。 その後、オブジェクトはシンクオブジェクトの発信インターフェイスのメソッドを呼び出して、オブジェクトの変更をクライアントに通知したり、クライアントのイベントをトリガーしたり、クライアントに何かを要求したり、実際、オブジェクトの作成者が思いつくあらゆる目的のために使用します。

送信インターフェイスの例は、クライアントにイベントを通知するためにプッシュ ボタン コントロールによって定義される IButtonSink インターフェイスです。 たとえば、ユーザーが画面上のボタンをクリックすると、ボタン オブジェクトはクライアントのシンク オブジェクトの IButtonSink::OnClick を呼び出します。 ボタン コントロールは送信インターフェイスを定義します。 ボタンのクライアントがイベントを処理するには、クライアントは送信インターフェイスをシンク オブジェクトに実装し、そのシンクをボタン コントロールに接続する必要があります。 その後、ボタン内でイベントが発生すると、ボタンはシンクを呼び出し、その時点でクライアントはそのボタンのクリックに割り当てたいアクションを実行できます。

接続可能なオブジェクトは、オブジェクトからクライアントへの通信のための一般的なメカニズムを提供します。 あらゆる種類のイベントや通知を公開するすべてのオブジェクトは、このテクノロジを使用できます。 一般的な接続可能なオブジェクト テクノロジに加えて、COM は、クライアントが関心のある特定のイベントをクライアントに通知するためにオブジェクトによって使用される多くの特殊目的のシンクおよびサイト インターフェイスを提供します。 たとえば、 IAdviseSink は、オブジェクトがデータをクライアントに通知し、オブジェクトの変更を表示するのに使用できます。

詳細については、次のトピックを参照してください。