IDispEventImpl

此类提供 IDispatch 方法的实现。

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

template <UINT nID, class T,
    const IID* pdiid = &IID_NULL,
    const GUID* plibid = &GUID_NULL,
    WORD wMajor = 0,
    WORD wMinor = 0,
    class tihclass = CcomTypeInfoHolder>
class ATL_NO_VTABLE IDispEventImpl : public IDispEventSimpleImpl<nID, T, pdiid>

参数

nID
源对象的唯一标识符。 当 IDispEventImpl 是复合控件的基类时,将所需包含的控件的资源 ID 用于此参数。 在其他情况下,请使用任意正整数。

T
用户类,派生自 IDispEventImpl

pdiid
指向由此类实现的事件调度接口的 IID 的指针。 必须在类型库中plibidwMajorwMinor定义此接口,并且。

plibid
指向类型库的指针,该类型库定义指向的 pdiid调度接口。 如果 &GUID_NULL,将从源事件的对象加载类型库。

wMajor
类型库的主版本。 默认值为 0。

wMinor
类型库的次版本。 默认值为 0。

tihclass
用于管理其 T类型信息的类。 默认值是一个类型 CComTypeInfoHolder类;但是,可以通过提供一个类型以外的 CComTypeInfoHolder类型的类来替代此模板参数。

成员

公共 Typedef

名称 描述
IDispEventImpl::_tihclass 用于管理类型信息的类。 默认情况下为 CComTypeInfoHolder

公共构造函数

名称 描述
IDispEventImpl::IDispEventImpl 构造函数。

公共方法

名称 描述
IDispEventImpl::GetFuncInfoFromId 查找指定调度标识符的函数索引。
IDispEventImpl::GetIDsOfNames 将单个成员和可选参数名称集映射到相应的整数 DISPID集。
IDispEventImpl::GetTypeInfo 检索对象的类型信息。
IDispEventImpl::GetTypeInfoCount 检索类型信息接口的数量。
IDispEventImpl::GetUserDefinedType 检索用户定义类型的基本类型。

备注

IDispEventImpl 提供了一种实现事件分发接口的方法,而无需你为该接口上的每个方法/事件提供实现代码。 IDispEventImpl 提供了 IDispatch 方法的实现。 你只需要为你有兴趣处理的事件提供实现。

IDispEventImpl 与类中的事件接收器映射结合使用,将事件路由到相应的处理程序函数。 使用此类:

为要处理的每个对象上的每个事件添加事件 SINK_ENTRY 接收器映射或 SINK_ENTRY_EX 宏。 当用作 IDispEventImpl 复合控件的基类时,可以调用 AtlAdviseSinkMap 以建立和中断事件接收器映射中所有条目的事件源的连接。 在其他情况下,或者为了更好地控制,调用 DispEventAdvise 以在源对象和基类之间建立连接。 调用 DispEventUnadvise 以中断连接。

对于需要处理事件的每个对象,必须派生自 IDispEventImpl (使用 nID唯一值)。 你可以重用基类,方法如下:针对一个源对象进行取消建议,然后针对其他源对象进行建议,但是单个对象一次可以处理的源对象的最大数量受限于 IDispEventImpl 基类的数量。

IDispEventImpl 提供的功能与 提供的功能相同 IDispEventSimpleImpl,不同之处在于它从类型库获取有关接口的类型信息,而不是将其作为指向结构的指针 _ATL_FUNC_INFO 提供。 如果没有描述事件接口的类型库或想要避免与使用类型库关联的开销,请使用 IDispEventSimpleImpl

注意

IDispEventImplIDispEventSimpleImpl 提供了自身对于 IUnknown::QueryInterface 的实现,使每个 IDispEventImpl 类和 IDispEventSimpleImpl 基类能够充当单独的 COM 标识,同时仍允许直接访问主 COM 对象中的类成员。

ActiveX 事件接收器的 CE ATL 实现仅支持类型 HRESULTvoid 事件处理程序方法的返回值;不支持任何其他返回值,并且其行为未定义。

有关详细信息,请参阅 “支持 IDispEventImpl”。

继承层次结构

_IDispEvent

_IDispEventLocator

IDispEventSimpleImpl

IDispEventImpl

要求

标头atlcom.h

IDispEventImpl::GetFuncInfoFromId

查找指定调度标识符的函数索引。

HRESULT GetFuncInfoFromId(
    const IID& iid,
    DISPID dispidMember,
    LCID lcid,
    _ATL_FUNC_INFO& info);

参数

iid
[in] 对函数 ID 的引用。

dispidMember
[in] 函数的调度 ID。

lcid
[in] 函数 ID 的区域设置上下文。

info
[in] 指示如何调用函数的结构。

返回值

标准 HRESULT 值。

IDispEventImpl::GetIDsOfNames

将单个成员和一组可选参数名称映射到相应的整数 DISPID集,该集合可用于后续调用 IDispatch::Invoke

STDMETHOD(GetIDsOfNames)(
    REFIID riid,
    LPOLESTR* rgszNames,
    UINT cNames,
    LCID lcid,
    DISPID* rgdispid);

备注

请参阅 IDispatch::GetIDsOfNames Windows SDK。

IDispEventImpl::GetTypeInfo

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。

STDMETHOD(GetTypeInfo)(
    UINT itinfo,
    LCID lcid,
    ITypeInfo** pptinfo);

IDispEventImpl::GetTypeInfoCount

检索对象提供的类型信息接口的数量(0 或 1)。

STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);

备注

请参阅 IDispatch::GetTypeInfoCount Windows SDK。

IDispEventImpl::GetUserDefinedType

检索用户定义类型的基本类型。

VARTYPE GetUserDefinedType(
    ITypeInfo* pTI,
    HREFTYPE hrt);

参数

pTI
[in]指向包含用户定义类型的接口的指针 ITypeInfo

hrt
[in] 要检索的类型说明的句柄。

返回值

变体的类型。

备注

请参阅 ITypeInfo::GetRefTypeInfo

IDispEventImpl::IDispEventImpl

构造函数。 存储类模板参数plibidpdiidwMajorwMinor.

IDispEventImpl();

IDispEventImpl::_tihclass

此 typedef 是类模板参数 tihclass的实例。

typedef tihclass _tihclass;

备注

默认情况下,类为 CComTypeInfoHolderCComTypeInfoHolder 管理类的类型信息。

另请参阅

_ATL_FUNC_INFO 结构
IDispatchImpl
IDispEventSimpleImpl
SINK_ENTRY
SINK_ENTRY_EX
SINK_ENTRY_INFO
类概述