プログラムは、発生した問題を検出すると、クライアントに通知できます。 たとえば、株式ティッカー プログラムが株式の価格の変化を検出した場合、その変更をすべてのクライアントに通知できます。 この通知プロセスは、イベント を発生と呼ばれます。
COM を使用すると、サーバー オブジェクトは COM イベントを使用して、通知されるオブジェクトに関する情報なしでイベントを発生させることができます。 オブジェクトは、接続可能なオブジェクト を使用して、通知を要求したクライアントに関する詳細情報を保持することもできます。
COM 接続可能オブジェクトは、受信インターフェイスに加えて、クライアントへの発信インターフェイスを提供します。 その結果、オブジェクトとそのクライアントは双方向通信に関与できます。 受信インターフェイスはオブジェクトに実装され、オブジェクトの外部クライアントからの呼び出しを受信しますが、送信インターフェイスはクライアントのシンクに実装され、オブジェクトからの呼び出しを受信します。 オブジェクトは、使用するインターフェイスを定義し、クライアントはそれを実装します。
オブジェクトは、その受信インターフェイスを定義し、これらのインターフェイスの実装を提供します。 受信インターフェイスは、オブジェクトの IUnknown::QueryInterface メソッドを使用してクライアントで使用できます。 クライアントはオブジェクトの受信インターフェイスのメソッドを呼び出し、オブジェクトはクライアントに代わって必要なアクションを実行します。
発信インターフェイスもオブジェクトによって定義されますが、クライアントは、クライアントが作成するシンク オブジェクトに対する発信インターフェイスの実装を提供します。 次に、オブジェクトはシンク オブジェクト上の発信インターフェイスのメソッドを呼び出して、オブジェクトの変更をクライアントに通知したり、クライアントでイベントをトリガーしたり、クライアントに何かを要求したり、実際にはオブジェクト作成者が思い付く任意の目的のために呼び出します。
送信インターフェイスの例として、プッシュ ボタン コントロールによって定義された IButtonSink インターフェイスがあり、そのイベントをクライアントに通知します。 たとえば、ユーザーが画面上のボタンをクリックすると、ボタン オブジェクトはクライアントのシンク オブジェクトで IButtonSink::OnClick を呼び出します。 ボタン コントロールは、送信インターフェイスを定義します。 ボタンのクライアントがイベントを処理するには、クライアントはシンク オブジェクトにその送信インターフェイスを実装し、そのシンクをボタン コントロールに接続する必要があります。 次に、ボタンでイベントが発生すると、ボタンによってシンクが呼び出され、その時点でクライアントはそのボタン クリックに割り当てるアクションを実行できます。
接続可能なオブジェクトは、オブジェクトからクライアントへの通信のための一般的なメカニズムを提供します。 任意の種類のイベントまたは通知を公開する任意のオブジェクトは、このテクノロジを使用できます。 一般的な接続可能なオブジェクト テクノロジに加えて、COM は、オブジェクトがクライアントに関心のある特定のイベントを通知するために使用する多くの特殊な目的のシンクおよびサイト インターフェイスを提供します。 たとえば、IAdviseSink は、オブジェクトがデータをクライアントに通知し、オブジェクトの変更を表示するために使用できます。
詳細については、次のトピックを参照してください。
- 接続可能なオブジェクト のアーキテクチャの
- 接続可能なオブジェクト インターフェイスの