COM_INTERFACE_ENTRY (ATL)
COM_INTERFACE_ENTRY宏
这些宏输入对象的接口其COM映射,以便它们可以由 QueryInterface访问。 在 QueryInterface期间,条目的顺序在COM映射的是order接口将检查匹配的IID。
若要通过 QueryInterface 显示其接口中的每个对象都必须有其自己的COM映射。 COM映射从macro BEGIN_COM_MAP启动。 接口项添加与一个或多COM_INTERFACE_ENTRY 宏,并且,映射完成与 END_COM_MAP 宏。 例如:
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映射。 例如:
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 )
在进入忽略情况下,punk 假定参数指向聚合的内部未知或到 NULL。 通常,您会 CoCreate 在 FinalConstruct的聚合。
有关COM映射项的备注参见 COM_INTERFACE_ENTRY宏。
指定您的对象可以聚合。
DECLARE_CLASSFACTORY_AUTO_THREAD
声明 CComClassFactoryAutoThread 是选件类工厂。
CComCoClass 包括 DECLARE_CLASSFACTORY 宏,指定 CComClassFactory,在默认选件类工厂。 但是,通过包括DECLARE_CLASSFACTORY_AUTO_THREAD 宏在对象类定义,重写此默认设置。
当在多个单元中创建对象(进程外进程内服务器)中,添加 DECLARE_CLASSFACTORY_AUTO_THREAD 到您的选件类。
保护您的已从+中删除的对象;如果(在 FinalConstruct句点)内部进行聚合的对象会递增引用计数递减然后计数为0。
DECLARE_PROTECT_FINAL_CONSTRUCT( )