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

注意

IDispEventImplIDispEventSimpleImpl 提供了自身对于 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 类,则需要通过使用你感兴趣的特定基类来确定调用的范围,从而消除对该方法的调用的歧义。

DispEventAdvisepdiid 中指定的事件源建立连接。

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
类概述