CComAggObject 类
此类实现聚合对象的 IUnknown 接口。 根据定义,聚合对象包含在外部对象中。 CComAggObject
类类似于 CComObject 类,只不过它公开了直接可供外部客户端访问的接口。
语法
template<class contained>
class CComAggObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
参数
contained
类派生自 CComObjectRoot 或 CComObjectRootEx,以及对象上你要支持的任何其他接口。
成员
公共构造函数
名称 | 描述 |
---|---|
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
为聚合对象实现 IUnknown。 CComAggObject
具有自己的 IUnknown
接口,独立于外部对象的 IUnknown
接口,并维护其自己的引用计数。
有关聚合的详细信息,请参阅 ATL COM 对象的基础知识一文。
继承层次结构
CComObjectRootBase
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
使用此静态函数可以创建新的 CComAggObjectcontained
>< 对象,而无需 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] 类派生自 CComObjectRoot 或 CComObjectRootEx,以及对象上你要支持的任何其他接口。
备注
通过 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
类概述