次の方法で共有


ATL イベント処理の概要

一般に、COM イベントの処理は比較的単純なプロセスです。 主な手順が 3 つあります。

  • オブジェクトにイベントインターフェイスを実装する。

  • オブジェクトがイベントを受け取る必要があることをイベント ソースに通知する。

  • オブジェクトがイベントを受け取る必要がなくなったときに、イベント ソースの通知を解除する。

インターフェイスの実装

ATL を使用してインターフェイスを実装するとき、主に 4 つの方法があります。

派生元 インターフェイス型に適している すべてのメソッドを実装する必要がある* 実行時にタイプ ライブラリが必要
インターフェイス Vtable はい いいえ
IDispatchImpl デュアル はい はい
IDispEventImpl Dispinterface いいえ はい
IDispEventSimpleImpl Dispinterface いいえ いいえ

* ATL サポート クラスを利用するとき、IUnknown または IDispatch メソッドを手動で実装する必要はありません。

イベント ソースのアドバイスとアドバイス解除

ATL を使用してイベント ソースをアドバイスおよびアドバイス解除するには、主に 3 つの方法があります。

Advise 関数 Unadvise 関数 次での使用に最適 Cookie を追跡する必要がある Comments
AtlAdvise, CComPtrBase::Advise AtlUnadvise Vtable またはデュアル インターフェイス はい AtlAdvise はグローバル ATL 関数です。 CComPtrBase::AdviseCComPtrCComQIPtr によって使用されます。
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 コントロールがアドバイスされ、アドバイス解除されます。 これは自動的に行われます。

関連項目

イベント処理
IDispEventImpl のサポート