CComObjectRootEx选件类

此选件类提供了处理对象引用nonaggregated和聚合的对象的计数管理。

template<
   class ThreadModel 
>
class CComObjectRootEx : public CComObjectRootBase

参数

成员

8hzca2fs.collapse_all(zh-cn,VS.110).gif方法

CComObjectRootEx

构造函数。

InternalAddRef

添加一个nonaggregated对象的引用计数。

InternalRelease

减nonaggregated对象的引用计数。

锁定

如果线程模型多线程,获取一个临界区对象的所有权。

unlock

如果线程模型多线程,您可以与临界区对象的所有权。

8hzca2fs.collapse_all(zh-cn,VS.110).gifCComObjectRootBase方法

FinalConstruct

在执行任何初始化的选件类的重写需要由您的对象。

FinalRelease

在执行任何清理的选件类的重写需要由您的对象。

OuterAddRef

添加一个聚合的对象的引用计数。

OuterQueryInterface

一个复合对象的外部 IUnknown 的委托。

OuterRelease

天数进行聚合的对象的引用计数。

8hzca2fs.collapse_all(zh-cn,VS.110).gif静态函数

InternalQueryInterface

一nonaggregated对象的 IUnknown 的委托。

ObjectMain

对模块初始化和终止时的派生类在对象图中列出。

8hzca2fs.collapse_all(zh-cn,VS.110).gif数据成员

m_dwRef

m_pOuterUnknown的一部分,联合。使用对象时,不聚合持有引用计数 AddRefRelease

m_pOuterUnknown

m_dwRef的一部分,联合。使用对象时,聚合存储指针到外部未知。

备注

CComObjectRootEx 处理对象引用nonaggregated和聚合的对象的计数管理。它保留对象引用计数,如果您的对象不进行聚合,并存储指针给外部未知,如果您的对象进行聚合。对聚合的对象,CComObjectRootEx 方法可用于处理内部对象的失败到构造的,因此,防止删除的外部对象,释放内部接口或内部对象被删除。

实现COM服务器的选件类必须从 CComObjectRootExCComObjectRoot继承。

如果您的类定义指定 DECLARE_POLY_AGGREGATABLE 宏,ATL创建 CComPolyObject<CYourClass> 的实例,将 IClassFactory::CreateInstance 调用时。在创建时,外部未知的值进行检查。如果是 NULLIUnknown 为一nonaggregated对象实现。如果外部未知不是 NULLIUnknown 为一个复合的对象实现。

如果您的选件类不指定 DECLARE_POLY_AGGREGATABLE 宏,ATL创建 CAggComObject<CYourClass> 实例聚合的对象的或 CComObject<CYourClass> 实例nonaggregated对象的。

使用 CComPolyObject 的优点是您避免为 CComAggObjectCComObject 在的模块处理合成和nonaggregated大小写。一个 CComPolyObject 对象处理两种情况。因此,只有一个副本的vtable和函数的一个副本存在于您的模块。如果vtable大,则可以显着降低您的模块范围。但是,因此,如果vtable很小,使用 CComPolyObject 从而导致一个稍微大的模块范围,因为它没有为一个复合的或nonaggregated对象转换,如 CComAggObjectCComObject

如果您的对象进行聚合,IUnknownCComAggObjectCComPolyObject实现。这些选件类委托 QueryInterfaceAddRef,并且,Release 调用CComObjectRootExOuterQueryInterfaceOuterAddRefOuterRelease 转发到外部未知。通常,可以复盖您的选件类的 CComObjectRootEx::FinalConstruct 创建所有聚合的对象,并重写 CComObjectRootEx::FinalRelease 释放任何聚合的对象。

如果您的对象不进行聚合,IUnknownCComObjectCComPolyObject实现。在这种情况下,调用 QueryInterfaceAddRef,并且,Release 将委托给CComObjectRootExInternalQueryInterfaceInternalAddRefInternalRelease 执行实际操作。

要求

Header: atlcom.h

请参见

参考

CComAggObject选件类

CComObject选件类

CComPolyObject选件类

其他资源

ATL选件类概述