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
值必须是 CC_CDECL,回调函数调用方法为 __stdcall。调用 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::Advise
调用此方法与 pUnk 表示的事件源建立连接。
HRESULT Advise(IUnknown* pUnk);
参数
pUnk
[in] 指向事件源对象的 IUnknown
接口的指针。
返回值
S_OK 或任何失败 HRESULT 值。
备注
建立连接后,从 pUnk 触发的事件将通过事件接收器映射路由到你的类中的处理程序。
注意
如果你的类派生自多个 IDispEventSimpleImpl
类,则需要通过使用你感兴趣的特定基类来确定调用的范围,从而消除对该方法的调用的歧义。
Advise
与默认事件源建立连接,它获取由 AtlGetObjectSourceInterface 确定的对象的默认事件源的 IID。
IDispEventSimpleImpl::DispEventAdvise
调用此方法与 pUnk 表示的事件源建立连接。
HRESULT DispEventAdvise(IUnknown* pUnk const IID* piid);
参数
pUnk
[in] 指向事件源对象的 IUnknown
接口的指针。
piid
指向事件源对象的 IID 的指针。
返回值
S_OK 或任何失败 HRESULT 值。
注解
随后,从 pUnk 触发的事件将通过事件接收器映射路由到你的类中的处理程序。
注意
如果你的类派生自多个 IDispEventSimpleImpl
类,则需要通过使用你感兴趣的特定基类来确定调用的范围,从而消除对该方法的调用的歧义。
DispEventAdvise
与 pdiid
中指定的事件源建立连接。
IDispEventSimpleImpl::DispEventUnadvise
断开与 pUnk 表示的事件源的连接。
HRESULT DispEventUnadvise(IUnknown* pUnk const IID* piid);
参数
pUnk
[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);
参数
pUnk
[in] 指向事件源对象的 IUnknown
接口的指针。
返回值
S_OK 或任何失败 HRESULT 值。
备注
一旦连接断开,事件将不再路由到事件接收器映射中列出的处理函数。
注意
如果你的类派生自多个 IDispEventSimpleImpl
类,则需要通过使用你感兴趣的特定基类来确定调用的范围,从而消除对该方法的调用的歧义。
Unadvise
中断使用 pdiid
中指定的默认事件源建立的连接。
Unavise
中断与默认事件源的连接,它获取由 AtlGetObjectSourceInterface 确定的对象的默认事件源的 IID。
另请参阅
_ATL_FUNC_INFO 结构
IDispatchImpl 类
IDispEventImpl 类
SINK_ENTRY_INFO
类概述