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
、AddRef
、および 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
クラスの概要