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 的指针。 必须在 plibid、wMajor 和 wMinor 表示的类型库中定义此接口。

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_ENTRYSINK_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 实现仅支持从事件处理程序方法返回 HRESULT 或 void 类型的返回值;任何其他返回值都不受支持,其行为未定义。

有关详细信息,请参阅支持 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);

备注

请参阅 Windows SDK 中的 IDispatch::GetIDsOfNames

IDispEventImpl::GetTypeInfo

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

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

备注

IDispEventImpl::GetTypeInfoCount

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

STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);

备注

请参阅 Windows SDK 中的 IDispatch::GetTypeInfoCount

IDispEventImpl::GetUserDefinedType

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

VARTYPE GetUserDefinedType(
    ITypeInfo* pTI,
    HREFTYPE hrt);

参数

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

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

返回值

变体的类型。

注解

请参阅 ITypeInfo::GetRefTypeInfo

IDispEventImpl::IDispEventImpl

构造函数。 存储类模板参数 plibid 、 pdiid 、 wMajor 和 wMinor 的值。

IDispEventImpl();

IDispEventImpl::tihclass

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

typedef tihclass _tihclass;

注解

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

另请参阅

_ATL_FUNC_INFO 结构
IDispatchImpl 类
IDispEventSimpleImpl 类
SINK_ENTRY
SINK_ENTRY_EX
SINK_ENTRY_INFO
类概述