IDispEventSimpleImpl クラス
このクラスは、タイプ ライブラリから型情報を取得せずに、IDispatch
メソッドの実装を提供します。
重要
このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。
構文
template <UINT nID, class T, const IID* pdiid>
class ATL_NO_VTABLE IDispEventSimpleImpl : public _IDispEventLocator<nID, pdiid>
パラメーター
nID
ソース オブジェクトの一意識別子。 IDispEventSimpleImpl
が複合コントロールの基本クラスである場合は、このパラメーターに必要な含まれているコントロールのリソース ID を使用します。 それ以外の場合は、任意の正の整数を使用します。
T
IDispEventSimpleImpl
から派生したユーザーのクラス。
pdiid
このクラスによって実装されるイベント ディスパッチ インターフェイスの IID へのポインター。
メンバー
パブリック メソッド
名前 | 説明 |
---|---|
IDispEventSimpleImpl::Advise | 既定のイベント ソースとの接続を確立します。 |
IDispEventSimpleImpl::DispEventAdvise | イベント ソースとの接続を確立します。 |
IDispEventSimpleImpl::DispEventUnadvise | イベント ソースとの接続を解除します。 |
IDispEventSimpleImpl::GetIDsOfNames | E_NOTIMPL を返します。 |
IDispEventSimpleImpl::GetTypeInfo | E_NOTIMPL を返します。 |
IDispEventSimpleImpl::GetTypeInfoCount | E_NOTIMPL を返します。 |
IDispEventSimpleImpl::Invoke | イベント シンク マップに一覧表示されているイベント ハンドラーを呼び出します。 |
IDispEventSimpleImpl::Unadvise | 既定のイベント ソースとの接続を解除します。 |
解説
IDispEventSimpleImpl
では、インターフェイスのすべてのメソッドまたはイベントに対して実装コードを指定することなく、イベント ディスパッチ インターフェイスを実装する方法が提供されます。 IDispEventSimpleImpl
では、IDispatch
メソッドの実装が提供されます。 必要なのは、処理に関心があるイベントの実装を指定することだけです。
IDispEventSimpleImpl
は、クラスのイベント シンク マップと連携して、適切なハンドラー関数にイベントをルーティングします。 このクラスを使用するには、次のようにします。
処理する各オブジェクトの各イベントについて、イベント シンク マップに SINK_ENTRY_INFO マクロを追加します。
各エントリのパラメーターとして _ATL_FUNC_INFO 構造体へのポインターを渡すことによって、各イベントの型情報を指定します。 x86 プラットフォームでは、
_ATL_FUNC_INFO.cc
値は __stdcall のコールバック関数の呼び出しメソッドを含む CC_CDECL である必要があります。ソース オブジェクトと基底クラスの間の接続を確立するには、DispEventAdvise を呼び出します。
接続を解除するには、DispEventUnadvise を呼び出します。
イベントを処理する必要があるオブジェクトごとに、(nID に一意の値を使用して) IDispEventSimpleImpl
から派生する必要があります。 1 つのソース オブジェクトに対してアドバイズ解除してから、別のソース オブジェクトに対してアドバイズすることで基底クラスを再利用できます。しかし、一度に 1 つのオブジェクトで処理できるソース オブジェクトの最大数は、IDispEventSimpleImpl
基底クラスの数によって制限されます。
IDispEventSimplImpl
は IDispEventImpl と同じ機能を提供しますが、タイプ ライブラリからインターフェイスに関する型情報を取得しない点が異なります。 ウィザードでは、IDispEventImpl
にのみ基づくコードが生成されますが、手動でコードを追加することによって IDispEventSimpleImpl
を使用できます。 イベント インターフェイスを記述するタイプ ライブラリがない場合、またはタイプ ライブラリの使用に関連するオーバーヘッドを回避する場合は、IDispEventSimpleImpl
を使用します。
Note
IDispEventImpl
および IDispEventSimpleImpl
では、各 IDispEventImpl
または IDispEventSimpleImpl
基底クラスが個別の COM ID として機能できるようにする独自の IUnknown::QueryInterface
の実装を提供しながら、メイン COM オブジェクトのクラス メンバーに引き続き直接アクセスできるようにします。
ActiveX イベント シンクの CE ATL 実装では、イベント ハンドラー メソッドから型が HRESULT または void である戻り値だけがサポートされます。他の戻り値はサポートされておらず、その動作は未定義です。
詳細については、「IDispEventImpl のサポート」を参照してください。
継承階層
_IDispEvent
_IDispEventLocator
IDispEventSimpleImpl
要件
ヘッダー: atlcom.h
IDispEventSimpleImpl::Advise
このメソッドを呼び出して、pUnk によって表されるイベント ソースとの接続を確立します。
HRESULT Advise(IUnknown* pUnk);
パラメーター
pUnk
[入力] イベント ソース オブジェクトの IUnknown
インターフェイスへのポインター。
戻り値
S_OK または失敗の HRESULT 値。
解説
接続が確立されると、pUnk から発生したイベントは、イベント シンク マップを使用してクラス内のハンドラーにルーティングされます。
Note
クラスが複数の IDispEventSimpleImpl
のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。
Advise
は既定のイベント ソースとの接続を確立します。これは、AtlGetObjectSourceInterface によって決定されるオブジェクトの既定のイベント ソースの IID を取得します。
IDispEventSimpleImpl::DispEventAdvise
このメソッドを呼び出して、pUnk によって表されるイベント ソースとの接続を確立します。
HRESULT DispEventAdvise(IUnknown* pUnk const IID* piid);
パラメーター
pUnk
[入力] イベント ソース オブジェクトの IUnknown
インターフェイスへのポインター。
piid
イベント ソース オブジェクトの IID へのポインター。
戻り値
S_OK または失敗の HRESULT 値。
解説
その後、pUnk から発生したイベントは、イベント シンク マップを使用してクラス内のハンドラーにルーティングされます。
Note
クラスが複数の IDispEventSimpleImpl
のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。
DispEventAdvise
は、pdiid
で指定されたイベント ソースとの接続を確立します。
IDispEventSimpleImpl::DispEventUnadvise
pUnk によって表されるイベント ソースとの接続を解除します。
HRESULT DispEventUnadvise(IUnknown* pUnk const IID* piid);
パラメーター
pUnk
[入力] イベント ソース オブジェクトの IUnknown
インターフェイスへのポインター。
piid
イベント ソース オブジェクトの IID へのポインター。
戻り値
S_OK または失敗の HRESULT 値。
解説
接続が切断されると、イベント シンク マップに示されているハンドラー関数にイベントがルーティングされなくなります。
Note
クラスが複数の IDispEventSimpleImpl
のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。
DispEventAdvise
は pdiid
で指定されたイベント ソースを使用して確立された接続を解除します。
IDispEventSimpleImpl::GetIDsOfNames
IDispatch::GetIDsOfNames
の実装によって E_NOTIMPL が返されます。
STDMETHOD(GetIDsOfNames)(
REFIID /* riid */,
LPOLESTR* /* rgszNames */,
UINT /* cNames */,
LCID /* lcid */,
DISPID* /* rgdispid */);
解説
Windows SDK の IDispatch::GetIDsOfNames に関する記事を参照してください。
IDispEventSimpleImpl::GetTypeInfo
IDispatch::GetTypeInfo
の実装によって E_NOTIMPL が返されます。
STDMETHOD(GetTypeInfo)(
UINT /* itinfo */,
LCID /* lcid */,
ITypeInfo** /* pptinfo */);
解説
Windows SDK の IDispatch::GetTypeInfo に関する記事を参照してください。
IDispEventSimpleImpl::GetTypeInfoCount
IDispatch::GetTypeInfoCount
の実装によって E_NOTIMPL が返されます。
STDMETHOD(GetTypeInfoCount)(UINT* /* pctinfo */);
解説
Windows SDK の IDispatch::GetTypeInfoCount に関するページを参照してください。
IDispEventSimpleImpl::Invoke
IDispatch::Invoke
の実装によって、イベント シンク マップに一覧表示されているイベント ハンドラーが呼び出されます。
STDMETHOD(Invoke)(
DISPID dispidMember,
REFIID /* riid */,
LCID lcid,
WORD /* wFlags */,
DISPPARMS* pdispparams,
VARIANT* pvarResult,
EXCEPINFO* /* pexcepinfo */,
UINT* /* puArgErr */);
解説
IDispatch::Invoke に関する記事を参照してください。
IDispEventSimpleImpl::Unadvise
pUnk によって表されるイベント ソースとの接続を解除します。
HRESULT Unadvise(IUnknown* pUnk);
パラメーター
pUnk
[入力] イベント ソース オブジェクトの IUnknown
インターフェイスへのポインター。
戻り値
S_OK または失敗の HRESULT 値。
解説
接続が切断されると、イベント シンク マップに示されているハンドラー関数にイベントがルーティングされなくなります。
Note
クラスが複数の IDispEventSimpleImpl
のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。
Unadvise
は pdiid
で指定された既定のイベント ソースを使用して確立された接続を解除します。
Unavise
は既定のイベント ソースとの接続を解除します。これは、AtlGetObjectSourceInterface によって決定されるオブジェクトの既定のイベント ソースの IID を取得します。
関連項目
_ATL_FUNC_INFO 構造体
IDispatchImpl クラス
IDispEventImpl クラス
SINK_ENTRY_INFO
クラスの概要