次の方法で共有


ATL のイベント処理の概要

一般に、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 のサポート