ATL COM 宏

本文详细解释了COM_INTERFACE_ENTRY宏及其参数、备注、示例等,包括COM_INTERFACE_ENTRY_AGGREGATE宏、DECLARE_AGGREGATABLE、DECLARE_CLASSFACTORY_AUTO_THREAD、DECLARE_PROTECT_FINAL_CONSTRUCT等内容,提供了在ATL中使用COM接口映射的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

COM_INTERFACE_ENTRY (ATL)

输入接口COM接口映射。

COM_INTERFACE_ENTRY( x )
x

[in]您的选件类对象直接从派生接口的名称。

通常,这是通常使用的项类型。

有关COM映射项的备注参见 COM_INTERFACE_ENTRY宏

C++
BEGIN_COM_MAP(CThisExample)
   COM_INTERFACE_ENTRY(IThisExample)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()


COM_INTERFACE_ENTRY宏


这些宏输入对象的接口其COM映射,以便它们可以由 QueryInterface访问。 在 QueryInterface期间,条目的顺序在COM映射的是order接口将检查匹配的IID

若要通过 QueryInterface 显示其接口中的每个对象都必须有其自己的COM映射。 COM映射从macro BEGIN_COM_MAP启动。 接口项添加与一个或多COM_INTERFACE_ENTRY 宏,并且,映射完成与 END_COM_MAP 宏。 例如:

C++
BEGIN_COM_MAP(CMyObject)
   COM_INTERFACE_ENTRY(IMyObject)
   COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()


请注意在COM映射的第一次enter必须位于包含COM映射对象的接口。 因此,您无法启动您的 COM_INTERFACE_ENTRY_CHAIN的COM映射项,使不同的对象COM映射中搜索该点 COM_INTERFACE_ENTRY_CHAIN(COtherObject) 显示在对象的COM映射。 如果要首先搜索其他对象COM映射,请添加 IUnknown 的接口项到COM映射,则将另一个对象的COM映射。 例如:

C++
BEGIN_COM_MAP(CThisObject)
   COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()


警告说明 警告

基于3.0版中,ATL使用编译器关键字 __uuidof( class ) 获取给定选件类中相应的IID。 由于在 COM_INTERFACE_ENTRY 宏中的更改活动在3.0版中,您现在包含接口的标头可以使用,而不是也链接到定义该接口的匹配IIDs的库。 此更改会造成问题,如果标头由MIDL的旧版本之前生成,或者,如果它手动正确代码并且未标记。 如果接口的说明。该标头未标记有一个关联的 __declspec( uuid ),则所有尝试为该接口中使用 __uuidof 关键字将失败。 将数据库还原到早期(ATL为) COM_INTERFACE_ENTRY 宏通过定义在生成设置的 _ATL_NO_UUIDOF 在此新行为的任何问题。

COM_INTERFACE_ENTRY_AGGREGATE

当 iid 确定的接口。查询,该 COM_INTERFACE_ENTRY_AGGREGATE 到 punk

COM_INTERFACE_ENTRY_AGGREGATE( iid, punk )
iid

[in]接口的GUID查询。

punk

[in] IUnknown 指针的名称。

在进入忽略情况下,punk 假定参数指向聚合的内部未知或到 NULL。 通常,您会 CoCreate 在 FinalConstruct的聚合。

有关COM映射项的备注参见 COM_INTERFACE_ENTRY宏

C++
BEGIN_COM_MAP(COuter1)
   COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_punkAgg)
END_COM_MAP()


指定您的对象可以聚合。

DECLARE_AGGREGATABLE( 
   x  
)
x

[in]要定义为可聚集的选件类的名称。

DECLARE_CLASSFACTORY_AUTO_THREAD

声明 CComClassFactoryAutoThread 是选件类工厂。

DECLARE_CLASSFACTORY_AUTO_THREAD( )

CComCoClass 包括 DECLARE_CLASSFACTORY 宏,指定 CComClassFactory,在默认选件类工厂。 但是,通过包括DECLARE_CLASSFACTORY_AUTO_THREAD 宏在对象类定义,重写此默认设置。

当在多个单元中创建对象(进程外进程内服务器)中,添加 DECLARE_CLASSFACTORY_AUTO_THREAD 到您的选件类。

保护您的已从+中删除的对象;如果(在 FinalConstruct句点)内部进行聚合的对象会递增引用计数递减然后计数为0。

DECLARE_PROTECT_FINAL_CONSTRUCT( )



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值