CComObject 類別
這個類別會實作 IUnknown
非匯總物件的 。
語法
template<class Base>
class CComObject : public Base
參數
Base
您的類別衍生自 CComObjectRoot 或 CComObjectRootEx,以及您想要在 物件上支援的任何其他介面。
成員
公用建構函式
名稱 | 描述 |
---|---|
CComObject::CComObject | 建構函式。 |
CComObject::~CComObject | 解構函式。 |
公用方法
名稱 | 描述 |
---|---|
CComObject::AddRef | 遞增 對象的參考計數。 |
CComObject::CreateInstance | (靜態)建立新的 CComObject 物件。 |
CComObject::QueryInterface | 擷取所要求介面的指標。 |
CComObject::Release | 遞減 對象的參考計數。 |
備註
CComObject
會實作非匯總物件的 IUnknown。 不過,對、 和的QueryInterface
呼叫會委派給 CComObjectRootEx
。Release
AddRef
如需使用 CComObject
的詳細資訊,請參閱 ATL COM 物件的基本概念一文。
繼承階層架構
Base
CComObject
需求
標頭: atlcom.h
CComObject::AddRef
遞增 對象的參考計數。
STDMETHOD_(ULONG, AddRef)();
傳回值
此函式會傳回 物件上新的遞增參考計數。 此值對於診斷或測試可能很有用。
CComObject::CComObject
建構函式會遞增模組鎖定計數。
CComObject(void* = NULL);
參數
不合法*
[in]不使用這個未命名的參數。 它存在於與其他 CComXXXObjectXXX
建構函式的對稱性。
備註
解構函式會遞減它。
CComObject
如果使用運算元成功建構new
衍生的物件,則初始參考計數為0。 若要將參考計數設定為適當的值 (1),請呼叫 AddRef 函式。
CComObject::~CComObject
解構函式。
CComObject();
備註
釋放所有已配置的資源、呼叫 FinalRelease,並遞減模組鎖定計數。
CComObject::CreateInstance
此靜態函式可讓您建立新的 CComObjectBase
<> 物件,而不需要 CoCreateInstance 的額外負荷。
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
參數
pp
[out]CComObject><Base
指標的指標。 如果 CreateInstance
失敗, pp 會設定為 NULL。
傳回值
標準 HRESULT 值。
備註
傳回的物件具有零的參考計數,因此立即呼叫 AddRef
,然後在完成時,使用 Release
釋放對象指標上的參考。
如果您不需要直接存取物件,但仍想要建立沒有 額外負荷 CoCreateInstance
的新物件,請改用 CComCoClass::CreateInstance 。
範例
class ATL_NO_VTABLE CMyCircle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCircle, &CLSID_MyCircle>,
public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CMyCircle()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)
DECLARE_NOT_AGGREGATABLE(CMyCircle)
BEGIN_COM_MAP(CMyCircle)
COM_INTERFACE_ENTRY(IMyCircle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_XCenter)(double* pVal);
};
// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));
// Increment reference count immediately
pCircle->AddRef();
// Access method of COM object
hRes = pCircle->get_XCenter(&x);
// Decrement reference count when done
pCircle->Release();
pCircle = NULL;
CComObject::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 值。
CComObject::Release
遞減 對象的參考計數。
STDMETHOD_(ULONG, Release)();
傳回值
此函式會傳回 物件上新的遞減參考計數。 在偵錯組建中,傳回值可能會對診斷或測試很有用。 在非偵錯組建中, Release
一律會傳回 0。
另請參閱
CComAggObject 類別
CComPolyObject 類別
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
類別概觀