CComPtrBase
类
此类为使用基于 COM 的内存例程的智能指针类提供基础。
语法
template <class T>
class CComPtrBase
参数
T
智能指针要引用的对象类型。
成员
公共构造函数
名称 | 描述 |
---|---|
CComPtrBase::~CComPtrBase |
析构函数。 |
公共方法
名称 | 描述 |
---|---|
CComPtrBase::Advise |
调用此方法在 CComPtrBase 的连接点与客户端的接收器之间创建连接。 |
CComPtrBase::Attach |
调用此方法以获取现有指针的所有权。 |
CComPtrBase::CoCreateInstance |
调用此方法创建与指定的类 ID 或程序 ID 关联的类的对象。 |
CComPtrBase::CopyTo |
调用此方法将 CComPtrBase 指针复制到另一个指针变量。 |
CComPtrBase::Detach |
调用此方法可释放指针的所有权。 |
CComPtrBase::IsEqualObject |
调用此方法来检查指定的 IUnknown 是否指向与 CComPtrBase 对象关联的同一对象。 |
CComPtrBase::QueryInterface |
调用此方法返回一个指向指定接口的指针。 |
CComPtrBase::Release |
调用此方法可释放接口。 |
CComPtrBase::SetSite |
调用此方法将 CComPtrBase 对象的站点设置为父对象的 IUnknown 。 |
公共运算符
“属性” | 描述 |
---|---|
CComPtrBase::operator T* |
强制转换运算符。 |
CComPtrBase::operator ! |
NOT 运算符。 |
CComPtrBase::operator & |
address-of & 运算符。 |
CComPtrBase::operator * |
pointer-to * 运算符。 |
CComPtrBase::operator < |
小于运算符。 |
CComPtrBase::operator == |
相等运算符。 |
CComPtrBase::operator -> |
指向成员的指针运算符。 |
公共数据成员
“属性” | 描述 |
---|---|
CComPtrBase::p |
指针数据成员变量。 |
备注
此类为使用 COM 内存管理例程的其他智能指针提供基础,例如和 CComQIPtr
和 CComPtr
。 派生类添加自己的构造函数和运算符,但依赖于 CComPtrBase
提供的方法。
要求
Header: atlcomcli.h
CComPtrBase::Advise
调用此方法在 CComPtrBase
的连接点与客户端的接收器之间创建连接。
HRESULT Advise(
IUnknown* pUnk,
const IID& iid,
LPDWORD pdw) throw();
参数
pUnk
一个指针,指向客户端的 IUnknown
。
iid
连接点的 GUID。 通常,此 GUID 与由连接点管理的传出接口相同。
pdw
一个指针,指向唯一标识连接的 Cookie。
返回值
成功时返回 S_OK
,失败时返回错误 HRESULT
。
备注
有关详细信息,请参阅 AtlAdvise
。
CComPtrBase::Attach
调用此方法以获取现有指针的所有权。
void Attach(T* p2) throw();
参数
p2
CComPtrBase
对象将获取此指针的所有权。
注解
Attach
对现有的 CComPtrBase::p
成员变量调用 CComPtrBase::Release
,然后将 p2
分配给 CComPtrBase::p
。 当一个 CComPtrBase
对象获得一个指针的所有权时,它会自动在指针上调用 Release
,如果对象上的引用计数变为 0,它将删除指针和任何分配的数据。
CComPtrBase::~CComPtrBase
析构函数。
~CComPtrBase() throw();
备注
释放 CComPtrBase
指向的接口。
CComPtrBase::CoCreateInstance
调用此方法创建与指定的类 ID 或程序 ID 关联的类的对象。
HRESULT CoCreateInstance(
LPCOLESTR szProgID,
LPUNKNOWN pUnkOuter = NULL,
DWORD dwClsContext = CLSCTX_ALL) throw();
HRESULT CoCreateInstance(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter = NULL,
DWORD dwClsContext = CLSCTX_ALL) throw();
参数
szProgID
指向 ProgID 的指针,用于恢复 CLSID。
pUnkOuter
如果为 NULL,则表明对象不是作为聚合的一部分创建的。 如果非 NULL,则为指向聚合对象的 IUnknown
接口(控制 IUnknown
)的指针。
dwClsContext
管理新创建对象的代码将在其中运行的上下文。
rclsid
CLSID 与将用于创建对象的数据和代码相关联。
返回值
成功时返回 S_OK
,失败时返回 REGDB_E_CLASSNOTREG
、CLASS_E_NOAGGREGATION
、CO_E_CLASSSTRING
或 E_NOINTERFACE
。 有关这些错误的描述,请参阅CoCreateClassInstance
和CLSIDFromProgID
。
注解
如果调用第一种形式的方法,则 CLSIDFromProgID
用于恢复 CLSID。 然后两种形式都调用 CoCreateClassInstance
。
在调试版本中,如果 CComPtrBase::p
等于 NULL,则会发生断言错误。
CComPtrBase::CopyTo
调用此方法将 CComPtrBase
指针复制到另一个指针变量。
HRESULT CopyTo(T** ppT) throw();
参数
ppT
接收 CComPtrBase
指针的变量地址。
返回值
成功时返回 S_OK
,失败时返回 E_POINTER
。
备注
将 CComPtrBase
指针复制到 ppT
。 CComPtrBase::p
成员变量的引用计数递增。
如果 ppT
等于 NULL,将返回错误 HRESULT
。 在调试版本中,如果 ppT
等于 NULL,则会发生断言错误。
CComPtrBase::Detach
调用此方法可释放指针的所有权。
T* Detach() throw();
返回值
返回对象的副本。
备注
释放指针的所有权,将 CComPtrBase::p
数据成员变量设置为 NULL,并返回指针的副本。
CComPtrBase::IsEqualObject
调用此方法来检查指定的 IUnknown
是否指向与 CComPtrBase
对象关联的同一对象。
bool IsEqualObject(IUnknown* pOther) throw();
参数
pOther
要比较的 IUnknown *
。
返回值
如果对象相同,则返回 true,否则返回 false。
CComPtrBase::operator !
NOT 运算符。
bool operator!() const throw();
返回值
如果 CComHeapPtr
指针等于 NULL,则返回 true,否则返回 false。
CComPtrBase::operator &
address-of &
运算符。
T** operator&() throw();
返回值
返回 CComPtrBase
对象指向的对象的地址。
CComPtrBase::operator *
pointer-to *
运算符。
T& operator*() const throw();
返回值
返回 CComPtrBase::p
的值;即指向 CComPtrBase
对象引用的对象的指针。
在调试版本中,如果 CComPtrBase::p
等于 NULL,则会发生断言错误。
CComPtrBase::operator ==
相等运算符。
bool operator== (T* pT) const throw();
参数
pT
指向 对象的指针。
返回值
如果 CComPtrBase
和 pT
指向同一个对象,则返回 true,否则返回 false。
CComPtrBase::operator ->
指向成员的指针的运算符。
_NoAddRefReleaseOnCComPtr<T>* operator->() const throw();
返回值
返回 CComPtrBase::p
数据成员变量的值。
备注
使用此运算符调用 CComPtrBase
对象指向的类中的方法。 在调试版本中,如果 CComPtrBase
数据成员指向 NULL,将发生断言失败。
CComPtrBase::operator <
小于运算符。
bool operator<(T* pT) const throw();
参数
pT
指向 对象的指针。
返回值
如果当前对象管理的指针小于与其进行比较的指针,则返回 true。
CComPtrBase::operator T*
强制转换运算符。
operator T*() const throw();
注解
返回指向类模板中定义的对象数据类型的指针。
CComPtrBase::p
指针数据成员变量。
T* p;
注解
此成员变量保存指针信息。
CComPtrBase::QueryInterface
调用此方法返回一个指向指定接口的指针。
template <class Q> HRESULT QueryInterface(Q
** pp) const throw();
参数
Q
需要其接口指针的对象类型。
pp
接收请求的接口指针的输出变量的地址。
返回值
成功时返回 S_OK
,失败时返回 E_NOINTERFACE
。
备注
此方法调用 IUnknown::QueryInterface
。
在调试版本中,如果 pp
等于 NULL,则会发生断言错误。
CComPtrBase::Release
调用此方法可释放接口。
void Release() throw();
备注
接口被释放,并 CComPtrBase::p
设置为 NULL。
CComPtrBase::SetSite
调用此方法将 CComPtrBase
对象的站点设置为父对象的 IUnknown
。
HRESULT SetSite(IUnknown* punkParent) throw();
参数
punkParent
一个指针,指向父级的 IUnknown
接口。
返回值
成功时返回 S_OK
,失败时返回错误 HRESULT
。
备注
此方法调用 AtlSetChildSite
。