IDispEventImpl クラス
更新 : 2007 年 11 月
このクラスは、IDispatch メソッドの実装を提供します。
template <
UINT nID,
class T,
const IID* pdiid = &IID_NULL,
const GUID* plibid = &GUID_NULL,
WORD wMajor = 0,
WORD wMinor = 0,
class tihclass = CcomTypeInfoHolder
>
class ATL_NO_VTABLE IDispEventImpl :
public IDispEventSimpleImpl<nID, T, pdiid>
パラメータ
nID
ソース オブジェクトの一意の識別子。IDispEventImpl が複合コントロールの基本クラスの場合は、必要なコンテナ内のコントロールのリソース ID を使用します。それ以外の場合は、任意の正の整数を使用します。T
IDispEventImpl から派生されるユーザーのクラス。pdiid
このクラスで実装されるイベントのディスパッチ インターフェイスの IID へのポインタ。このインターフェイスは、plibid、wMajor、および wMinor で示されるタイプ ライブラリに定義する必要があります。plibid
pdiid が指すディスパッチ インターフェイスを定義するタイプ ライブラリへのポインタ。&GUID_NULL を指定すると、タイプ ライブラリは、イベントを発生するオブジェクトから読み込まれます。wMajor
タイプ ライブラリのメジャー バージョン。既定値は 0 です。wMinor
タイプ ライブラリのマイナー バージョン。既定値は 0 です。tihclass
T の型情報の管理に使用されるクラスです。既定値は CComTypeInfoHolder 型のクラスです。ただし、CComTypeInfoHolder 以外の型のクラスを指定して、このテンプレート パラメータをオーバーライドできます。
解説
IDispEventImpl では、インターフェイスのメソッドやイベントごとに実装コードを指定せずにイベントのディスパッチ インターフェイスを実装する方法が用意されています。IDispEventImpl は IDispatch メソッドの実装を提供します。指定する必要があるのは、処理の対象となるイベントの実装だけです。
IDispEventImpl はクラスのイベント シンク マップと連動し、適切なハンドラ関数にイベントをルーティングします。このクラスを使用するには、次の手順に従います。
処理するオブジェクトのイベントごとに、イベント シンク マップに SINK_ENTRY マクロまたは SINK_ENTRY_EX マクロを追加します。IDispEventImpl を複合コントロールの基本クラスとして使用する場合は、AtlAdviseSinkMap を呼び出して、イベント シンク マップのすべてのエントリについてイベント ソースとの接続を確立および解除できます。それ以外の場合、またはより大きいコントロールの場合にソース オブジェクトと基本クラス間の接続を確立するには DispEventAdvise を呼び出します。接続を解除するには、DispEventUnadvise を呼び出します。
イベントを処理する必要のあるオブジェクトごとに、nID に一意の値を指定して IDispEventImpl から派生させる必要があります。あるソース オブジェクトに対するアドバイズを中止してから別のソース オブジェクトに対してアドバイズすることによって基本クラスを再利用できますが、一度に 1 つのオブジェクトで処理できるソース オブジェクトの最大数は IDispEventImpl 基本クラスの数によって制限されます。
IDispEventImpl の機能は IDispEventSimpleImpl と同じですが、IDispEventImpl ではインターフェイスのタイプ情報を _ATL_FUNC_INFO 構造体へのポインタとして指定するのではなく、タイプ ライブラリから取得します。イベント インターフェイスを記述するタイプ ライブラリがない場合、またはタイプ ライブラリの使用に関連するオーバーヘッドを回避する場合は、IDispEventSimpleImpl を使用します。
メモ : |
---|
IDispEventImpl と IDispEventSimpleImpl には、IUnknown::QueryInterface の独自の実装が用意されています。この実装により、IDispEventImpl 基本クラスと IDispEventSimpleImpl 基本クラスは個別の COM ID として機能する一方で、メイン COM オブジェクトのクラス メンバに直接アクセスすることもできます。 |
ActiveX イベント シンクの CE ATL 実装は、HRESULT の戻り値またはイベント ハンドラからの void のみをサポートします。その他の戻り値はサポートされていないため、動作は定義されません。
詳細については、「IDispEventImpl のサポート」を参照してください。
必要条件
ヘッダー : atlcom.h