CComObjectRootEx Class

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

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

参数

成员

方法

CComObjectRootEx

构造函数。

InternalAddRef

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

InternalRelease

减nonaggregated对象的引用计数。

锁定

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

unlock

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

CComObjectRootBase方法

FinalConstruct

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

FinalRelease

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

OuterAddRef

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

OuterQueryInterface

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

OuterRelease

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

静态函数

InternalQueryInterface

一nonaggregated对象的 IUnknown 的委托。

ObjectMain

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

数据成员

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 Class

CComObject Class

CComPolyObject Class

其他资源

ATL Class Overview