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;
必要条件
**ヘッダー:**atlcom.h