共用方式為


CComObject 類別

這個類別會實作 IUnknown 非匯總物件的 。

語法

template<class Base>
class CComObject : public Base

參數

基地
您的類別衍生自 CComObjectRoot CComObjectRootEx ,以及您想要在 物件上支援的任何其他介面。

成員

公用建構函式

名稱 描述
CComObject::CComObject 建構函式。
CComObject::~CComObject 解構函式。

公用方法

名稱 描述
CComObject::AddRef 遞增 物件的參考計數。
CComObject::CreateInstance (靜態)建立新的 CComObject 物件。
CComObject::QueryInterface 擷取所要求介面的指標。
CComObject::Release 遞減 物件的參考計數。

備註

CComObject會實作非匯總物件的 IUnknown 。 不過,對 、 和 的 QueryInterface 呼叫會委派給 CComObjectRootExReleaseAddRef

如需使用 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

此靜態函式可讓您建立新的 CComObject Base>< 物件,而不需要 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
類別概觀