次の方法で共有


CComObject::CreateInstance

この静的関数は CoCreateInstanceのオーバーヘッドを避けて CComObject<新しいBase> のオブジェクトを作成することができます。

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

パラメーター

  • pp
    [入力] CComObject<Base> のポインターへのポインター。 CreateInstance が失敗した場合、pp は nullに設定されます。

戻り値

標準の HRESULT 値。

解説

されたときに返される参照カウント、この呼び出し AddRef、を使用 [リリース] がオブジェクトにゼロのオブジェクト ポインターの参照を解放する配置されます。

オブジェクトへの直接アクセスを必要としないが、まだ 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

参照

関連項目

CComObject クラス