此类提供 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_ENTRY
接收器映射或 SINK_ENTRY_EX
宏。 当用作 IDispEventImpl
复合控件的基类时,可以调用 AtlAdviseSinkMap
以建立和中断事件接收器映射中所有条目的事件源的连接。 在其他情况下,或者为了更好地控制,调用 DispEventAdvise
以在源对象和基类之间建立连接。 调用 DispEventUnadvise
以中断连接。
对于需要处理事件的每个对象,必须派生自 IDispEventImpl
(使用 nID
唯一值)。 你可以重用基类,方法如下:针对一个源对象进行取消建议,然后针对其他源对象进行建议,但是单个对象一次可以处理的源对象的最大数量受限于 IDispEventImpl
基类的数量。
IDispEventImpl
提供的功能与 提供的功能相同 IDispEventSimpleImpl
,不同之处在于它从类型库获取有关接口的类型信息,而不是将其作为指向结构的指针 _ATL_FUNC_INFO
提供。 如果没有描述事件接口的类型库或想要避免与使用类型库关联的开销,请使用 IDispEventSimpleImpl
。
注意
IDispEventImpl
和 IDispEventSimpleImpl
提供了自身对于 IUnknown::QueryInterface
的实现,使每个 IDispEventImpl
类和 IDispEventSimpleImpl
基类能够充当单独的 COM 标识,同时仍允许直接访问主 COM 对象中的类成员。
ActiveX 事件接收器的 CE ATL 实现仅支持类型 HRESULT
或 void
事件处理程序方法的返回值;不支持任何其他返回值,并且其行为未定义。
有关详细信息,请参阅 “支持 IDispEventImpl
”。
继承层次结构
_IDispEvent
_IDispEventLocator
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
构造函数。 存储类模板参数plibid
、pdiid
和 wMajor
wMinor
.
IDispEventImpl();
IDispEventImpl::_tihclass
此 typedef 是类模板参数 tihclass
的实例。
typedef tihclass _tihclass;
备注
默认情况下,类为 CComTypeInfoHolder
。
CComTypeInfoHolder
管理类的类型信息。
另请参阅
_ATL_FUNC_INFO
结构
IDispatchImpl
类
IDispEventSimpleImpl
类
SINK_ENTRY
SINK_ENTRY_EX
SINK_ENTRY_INFO
类概述