次の方法で共有


ATL のイベント処理の概要

更新 : 2007 年 11 月

一般に、COM イベントの処理は比較的簡単です。処理は主に次の 3 段階に分かれます。

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

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

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

インターフェイスの実装

ATL を使用してインターフェイスを実装する主な 4 つの方法は次のとおりです。

派生元

適切なインターフェイスの種類

すべてのメソッドの実装が必要*

実行時にタイプ ライブラリが必要

インターフェイス

Vtable

×

IDispatchImpl

デュアル

IDispEventImpl

ディスパッチ インターフェイス

×

IDispEventSimpleImpl

ディスパッチ インターフェイス

×

×

* ATL でサポートされているクラスを使用する場合は、IUnknown メソッドと IDispatch メソッドを手動で実装する必要は一切ありません。

イベント ソースのアドバイズとアドバイズ中止

ATL を使用してイベント ソースのアドバイズとアドバイズ中止を行う主な 3 つの方法は次のとおりです。

アドバイズ関数

アドバイズ中止関数

最適なインターフェイス

Cookie の追跡が必要

コメント

AtlAdviseCComPtrBase::Advise

AtlUnadvise

vtable またはデュアル インターフェイス

AtlAdvise は、グローバル ATL 関数です。CComPtrBase::Advise は、CComPtrCComQIPtr が使用します。

IDispEventSimpleImpl::DispEventAdvise

IDispEventSimpleImpl::DispEventUnadvise

IDispEventImpl または IDispEventSimpleImpl

×

基本クラスの動作が多いため、AtlAdvise よりもパラメータが少なくなっています。

CComCompositeControl::AdviseSinkMap(TRUE)

CComCompositeControl::AdviseSinkMap(FALSE)

複合コントロール内の ActiveX コントロール

×

CComCompositeControl::AdviseSinkMap は、イベント シンク マップのすべてのエントリをアドバイズします。この関数は、エントリのアドバイズ中止も行います。このメソッドは、CComCompositeControl クラスによって自動的に呼び出されます。

CAxDialogImpl::AdviseSinkMap(TRUE)

CAxDialogImpl::AdviseSinkMap(FALSE)

ダイアログ ボックス内の ActiveX コントロール

×

CAxDialogImpl::AdviseSinkMap は、ダイアログ リソース内のすべての ActiveX コントロールをアドバイズおよびアドバイス中止します。この処理は自動的に行われます。

参照

概念

イベント処理と ATL

IDispEventImpl のサポート