CComAggObject 类

此类实现聚合对象的 IUnknown 接口。 根据定义,聚合对象包含在外部对象中。 CComAggObject 类类似于 CComObject 类,只不过它公开了直接可供外部客户端访问的接口。

语法

template<class contained>
class CComAggObject : public IUnknown,
   public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

参数

contained
类派生自 CComObjectRootCComObjectRootEx,以及对象上你要支持的任何其他接口。

成员

公共构造函数

名称 描述
CComAggObject::CComAggObject 构造函数。
CComAggObject::~CComAggObject 析构函数。

公共方法

名称 描述
CComAggObject::AddRef 递增聚合对象的引用计数。
CComAggObject::CreateInstance 此静态函数允许你创建新的 CComAggObject<contained> 对象,且不产生 CoCreateInstance 开销。
CComAggObject::FinalConstruct m_contained 执行最终的初始化。
CComAggObject::FinalRelease m_contained 执行最终的析构。
CComAggObject::QueryInterface 检索指向所请求的接口的指针。
CComAggObject::Release 减聚合对象的引用计数。

公共数据成员

“属性” 描述
CComAggObject::m_contained 委托对外部 unknown 的 IUnknown 调用。

备注

CComAggObject 为聚合对象实现 IUnknownCComAggObject 具有自己的 IUnknown 接口,独立于外部对象的 IUnknown 接口,并维护其自己的引用计数。

有关聚合的详细信息,请参阅 ATL COM 对象的基础知识一文。

继承层次结构

CComObjectRootBase

CComObjectRootEx

IUnknown

CComAggObject

要求

标头:atlcom.h

CComAggObject::AddRef

递增聚合对象的引用计数。

STDMETHOD_(ULONG, AddRef)();

返回值

可用于诊断或测试的值。

CComAggObject::CComAggObject

构造函数。

CComAggObject(void* pv);

参数

pv
[in] 外部 unknown。

注解

初始化 CComContainedObject 成员 m_contained,并递增模块锁计数。

析构函数递减模块锁计数。

CComAggObject::~CComAggObject

析构函数。

~CComAggObject();

注解

释放所有已分配的资源、调用 FinalRelease,并递减模块锁计数。

CComAggObject::CreateInstance

此静态函数允许你创建新的 CComAggObject<contained> 对象,且不产生 CoCreateInstance 开销。

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComAggObject<contained>** pp);

参数

pp
[out] 指向 CComAggObject<contained> 指针的指针。 如果 CreateInstance 不成功,则会将 pp 设置为 NULL。

返回值

标准 HRESULT 值。

备注

返回的对象的引用计数为零,因此请立即调用 AddRef,然后在完成后使用 Release 释放对象指针上的引用。

如果不需要直接访问对象,但仍希望创建一个新对象而没有 CoCreateInstance 开销,请改用 CComCoClass::CreateInstance

CComAggObject::FinalConstruct

在对象构造的最后阶段调用,此方法对 m_contained 成员执行任何最终初始化。

HRESULT FinalConstruct();

返回值

标准 HRESULT 值。

CComAggObject::FinalRelease

在对象析构期间调用,此方法释放 m_contained 成员。

void FinalRelease();

CComAggObject::m_contained

从类派生的 CComContainedObject 对象。

CComContainedObject<contained> m_contained;

参数

contained
[in] 类派生自 CComObjectRootCComObjectRootEx,以及对象上你要支持的任何其他接口。

备注

通过 m_contained 的所有 IUnknown 调用都委托给外部 unknown。

CComAggObject::QueryInterface

检索指向所请求的接口的指针。

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);

参数

iid
[in] 请求的接口的标识符。

ppvObject
[out] 一个指向 iid 所标识的接口指针的指针。 如果对象不支持此接口,则 ppvObject 设置为 NULL。

pp
[out] 指向类型 Q 标识的接口指针的指针。 如果对象不支持此接口,则 pp 设置为 NULL。

返回值

标准 HRESULT 值。

注解

如果请求的接口为 IUnknown,则 QueryInterface 会返回指向已聚合对象自己的 IUnknown 的指针,并递增引用计数。 否则,此方法会通过 CComContainedObject 成员 m_contained 来查询接口。

CComAggObject::Release

减聚合对象的引用计数。

STDMETHOD_(ULONG, Release)();

返回值

在调试生成中,Release 返回可用于诊断或测试的值。 在非调试生成中,Release 始终返回 0。

另请参阅

CComObject 类
CComPolyObject 类
DECLARE_AGGREGATABLE
DECLARE_ONLY_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
类概述