ATL のイベント処理の概要
更新 : 2007 年 11 月
一般に、COM イベントの処理は比較的簡単です。処理は主に次の 3 段階に分かれます。
オブジェクトでのイベント インターフェイスの実装
オブジェクトへのイベントの送信元となるイベント ソースのアドバイズ
オブジェクトがイベントを受け取る必要がなくなったときのイベント ソースのアドバイズ中止
インターフェイスの実装
ATL を使用してインターフェイスを実装する主な 4 つの方法は次のとおりです。
派生元 |
適切なインターフェイスの種類 |
すべてのメソッドの実装が必要* |
実行時にタイプ ライブラリが必要 |
---|---|---|---|
インターフェイス |
Vtable |
○ |
× |
デュアル |
○ |
○ |
|
ディスパッチ インターフェイス |
× |
○ |
|
ディスパッチ インターフェイス |
× |
× |
* ATL でサポートされているクラスを使用する場合は、IUnknown メソッドと IDispatch メソッドを手動で実装する必要は一切ありません。
イベント ソースのアドバイズとアドバイズ中止
ATL を使用してイベント ソースのアドバイズとアドバイズ中止を行う主な 3 つの方法は次のとおりです。
アドバイズ関数 |
アドバイズ中止関数 |
最適なインターフェイス |
Cookie の追跡が必要 |
コメント |
---|---|---|---|---|
vtable またはデュアル インターフェイス |
○ |
AtlAdvise は、グローバル ATL 関数です。CComPtrBase::Advise は、CComPtr と CComQIPtr が使用します。 |
||
× |
基本クラスの動作が多いため、AtlAdvise よりもパラメータが少なくなっています。 |
|||
複合コントロール内の ActiveX コントロール |
× |
CComCompositeControl::AdviseSinkMap は、イベント シンク マップのすべてのエントリをアドバイズします。この関数は、エントリのアドバイズ中止も行います。このメソッドは、CComCompositeControl クラスによって自動的に呼び出されます。 |
||
ダイアログ ボックス内の ActiveX コントロール |
× |
CAxDialogImpl::AdviseSinkMap は、ダイアログ リソース内のすべての ActiveX コントロールをアドバイズおよびアドバイス中止します。この処理は自動的に行われます。 |