次の方法で共有


イベント処理の原則

すべてのイベント処理には、共通する 3 つの段階があります。 次の作業を行う必要があります。

  • オブジェクトでのイベント インターフェイスの実装

  • オブジェクトへのイベントの送信元となるイベント ソースのアドバイズ

  • オブジェクトがイベントを受け取る必要がなくなったときのイベント ソースのアドバイズ中止

イベントの実装方法は、イベントの種類によって異なります。 イベント インターフェイスは、vtable、デュアル、または DispInterface のいずれでもかまいません。 インターフェイスの定義は、イベント ソースのデザイン担当者が行い、インターフェイスの実装は開発者が行います。

注意

技術的な点ではイベント インターフェイスをデュアルにできない理由はありませんが、デザイン上ではデュアルを使用しないほうがよい理由がいくつかあります。 ただし、これはイベント ソースのデザインまたは実装の担当者が決めることです。 ここではイベント シンクの観点で作業を行うため、デュアルのイベント インターフェイスを実装せざるをえない場合も考慮する必要があります。 デュアル インターフェイスの詳細については、「デュアル インターフェイスと ATL」を参照してください。

イベント ソースのアドバイズは、次の 3 段階に分けることができます。

イベントを受け取るときに必要なインターフェイスを正しく登録すると、ソース オブジェクトで発生したイベントに従ってオブジェクトのイベント インターフェイスのメソッドが呼び出されます。 イベントの受け取りが不要になったときは、IConnectionPoint::Unadvise を通してコネクション ポイントに Cookie を送り返すことができます。 これでソースとシンクとの間の接続が切断されます。

イベントを処理するとき、循環参照をしないように注意してください。

参照

概念

イベント処理と ATL