IDispEventSimpleImpl 類別
這個類別提供方法的 IDispatch
實作,而不需要從類型連結庫取得類型資訊。
重要
這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。
語法
template <UINT nID, class T, const IID* pdiid>
class ATL_NO_VTABLE IDispEventSimpleImpl : public _IDispEventLocator<nID, pdiid>
參數
nID
來源物件的唯一標識碼。 當 IDispEventSimpleImpl
是複合控件的基類時,請使用此參數所需自主控件的資源標識符。 在其他情況下,請使用任意正整數。
T
使用者類別,衍生自 IDispEventSimpleImpl
。
pdiid
這個類別所實作之事件 dispinterface 之 IID 的指標。
成員
公用方法
名稱 | 描述 |
---|---|
IDispEventSimpleImpl::建議 | 使用預設事件來源建立連線。 |
IDispEventSimpleImpl::D ispEventAdvise | 建立與事件來源的連線。 |
IDispEventSimpleImpl::D ispEventUnadvise | 中斷與事件來源的連線。 |
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 以中斷連線。
您必須針對需要處理事件的每個物件衍生自 IDispEventSimpleImpl
(針對 nID 使用唯一值)。 您可以針對一個來源物件取消加入基類,然後針對不同的來源物件提供建議,但單一物件可以一次處理的來源物件數目上限會受限於基類數目 IDispEventSimpleImpl
。
IDispEventSimplImpl
提供與 IDispEventImpl 相同的功能,但不會從類型連結庫取得介面的類型資訊。 精靈只會根據 IDispEventImpl
產生程式代碼,但您可以手動新增程式代碼來使用 IDispEventSimpleImpl
。 IDispEventSimpleImpl
當您沒有描述事件介面的類型庫,或想要避免使用類型連結庫相關聯的額外負荷時使用 。
注意
IDispEventImpl
和 IDispEventSimpleImpl
提供自己的實 IUnknown::QueryInterface
作,讓每個 IDispEventImpl
或 IDispEventSimpleImpl
基類都能作為個別的 COM 身分識別,同時仍然允許直接存取主要 COM 物件中的類別成員。
ActiveX 事件接收的 CE ATL 實作僅支援來自事件處理程式方法之 HRESULT 或 void 類型的傳回值;不支援任何其他傳回值,且其行為未定義。
如需詳細資訊,請參閱 支援 IDispEventImpl。
繼承階層架構
_IDispEvent
_IDispEventLocator
IDispEventSimpleImpl
需求
標頭: atlcom.h
IDispEventSimpleImpl::建議
呼叫這個方法,以建立與 pUnk 所表示之事件來源的連線。
HRESULT Advise(IUnknown* pUnk);
參數
朋克
[in]事件來源對象的介面指標 IUnknown
。
傳回值
S_OK或任何失敗的 HRESULT 值。
備註
建立連線之後,從 pUnk 引發的事件會透過事件接收對應路由傳送至類別中的處理程式。
注意
如果您的類別衍生自多個 IDispEventSimpleImpl
類別,您必須將呼叫範圍限定為您感興趣的特定基類,以釐清對此方法的呼叫。
Advise
建立與預設事件來源的連接,它會取得由 AtlGetObjectSourceInterface 所決定之物件之預設事件來源的 IID。
IDispEventSimpleImpl::D ispEventAdvise
呼叫這個方法,以建立與 pUnk 所表示之事件來源的連線。
HRESULT DispEventAdvise(IUnknown* pUnk const IID* piid);
參數
朋克
[in]事件來源對象的介面指標 IUnknown
。
piid
事件來源物件的 IID 指標。
傳回值
S_OK或任何失敗的 HRESULT 值。
備註
接著,從 pUnk 引發的事件會透過事件接收對應路由傳送至類別中的處理程式。
注意
如果您的類別衍生自多個 IDispEventSimpleImpl
類別,您必須將呼叫範圍限定為您感興趣的特定基類,以釐清對此方法的呼叫。
DispEventAdvise
與中指定的 pdiid
事件來源建立連接。
IDispEventSimpleImpl::D ispEventUnadvise
中斷與 pUnk 所表示之事件來源的連線。
HRESULT DispEventUnadvise(IUnknown* pUnk const IID* piid);
參數
朋克
[in]事件來源對象的介面指標 IUnknown
。
piid
事件來源物件的 IID 指標。
傳回值
S_OK或任何失敗的 HRESULT 值。
備註
線上中斷之後,事件將不再路由傳送至事件接收對應中列出的處理程式函式。
注意
如果您的類別衍生自多個 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);
參數
朋克
[in]事件來源對象的介面指標 IUnknown
。
傳回值
S_OK或任何失敗的 HRESULT 值。
備註
線上中斷之後,事件將不再路由傳送至事件接收對應中列出的處理程式函式。
注意
如果您的類別衍生自多個 IDispEventSimpleImpl
類別,您必須將呼叫範圍限定為您感興趣的特定基類,以釐清對此方法的呼叫。
Unadvise
會中斷使用 中指定的 pdiid
預設事件來源所建立的連接。
Unavise
中斷與預設事件來源的連接,它會取得由 AtlGetObjectSourceInterface 所決定之物件之預設事件來源的 IID。
另請參閱
_ATL_FUNC_INFO 結構
IDispatchImpl 類別
IDispEventImpl 類別
SINK_ENTRY_INFO
類別概觀