次の方法で共有


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 基底クラスの数によって制限されます。

IDispEventSimplImplIDispEventImpl と同じ機能を提供しますが、タイプ ライブラリからインターフェイスに関する型情報を取得しない点が異なります。 ウィザードでは、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 のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。

DispEventAdvisepdiid で指定されたイベント ソースを使用して確立された接続を解除します。

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 のクラスから派生している場合は、対象となる特定の基底クラスを使用して呼び出しのスコープを設定することによって、このメソッドの呼び出しを明確にする必要があります。

Unadvisepdiid で指定された既定のイベント ソースを使用して確立された接続を解除します。

Unavise は既定のイベント ソースとの接続を解除します。これは、AtlGetObjectSourceInterface によって決定されるオブジェクトの既定のイベント ソースの IID を取得します。

関連項目

_ATL_FUNC_INFO 構造体
IDispatchImpl クラス
IDispEventImpl クラス
SINK_ENTRY_INFO
クラスの概要