次の方法で共有


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 を実装します。 ただし、QueryInterfaceAddRef、および Release への呼び出しは CComObjectRootEx に委任されます。

CComObject の使用については、記事「ATL COM オブジェクトの基礎」を参照してください。

継承階層

Base

CComObject

要件

ヘッダー: atlcom.h

CComObject::AddRef

オブジェクトの参照カウントをインクリメントします。

STDMETHOD_(ULONG, AddRef)();

戻り値

この関数は、オブジェクトに対してインクリメントされた新しい参照カウントを返します。 この値は、診断またはテストに役立つ場合があります。

CComObject::CComObject

コンストラクターは、モジュールのロック カウントをインクリメントします。

CComObject(void* = NULL);

パラメーター

void*
[入力] この名前なしのパラメーターは使用されません。 これは、他の CComXXXObjectXXX コンストラクターとの対称のために存在します。

解説

デストラクターはこれをデクリメントします。

CComObject 派生オブジェクトが new 演算子を使用して正常に構築された場合、最初の参照カウントは 0 になります。 参照カウントを適切な値 (1) に設定するには、AddRef 関数を呼び出します。

CComObject::~CComObject

デストラクター。

CComObject();

解説

割り当てられているすべてのリソースを解放し、FinalRelease を呼び出して、モジュールのロック数をデクリメントします。

CComObject::CreateInstance

この静的関数を使用すると、CoCreateInstance のオーバーヘッドなしで新しい CComObject<Base> オブジェクトを作成できます。

static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);

パラメーター

pp
[出力] CComObject<Base> ポインターへのポインター。 CreateInstance が正常に終了しない場合、pp は NULL に設定されます。

戻り値

標準の HRESULT 値。

解説

返されるオブジェクトの参照カウントは 0 なので、すぐに 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
[入力] 要求されるインターフェイスの識別子。

ppvObject
[出力] iid によって識別されるインターフェイス ポインターへのポインター。 オブジェクトでこのインターフェイスがサポートされていない場合、ppvObject は NULL に設定されます。

pp
[出力] Q 型で識別されるインターフェイス ポインターへのポインター。 オブジェクトでこのインターフェイスがサポートされていない場合、pp は NULL に設定されます。

戻り値

標準の HRESULT 値。

CComObject::Release

オブジェクトの参照カウントをデクリメントします。

STDMETHOD_(ULONG, Release)();

戻り値

この関数は、オブジェクトに対してデクリメントされた新しい参照カウントを返します。 デバッグ ビルドでは、戻り値は診断またはテストに役立つ場合があります。 デバッグ以外のビルドでは、Release から常に 0 が返されます。

関連項目

CComAggObject クラス
CComPolyObject クラス
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
クラスの概要