次の方法で共有


CComCoClass::CreateInstance

COM オブジェクトのインスタンスを作成し、COM API を使用しないでのインターフェイス ポインターを取得するに CreateInstance これらの関数を使用します。

template <class Q>
static HRESULT CreateInstance(
   Q** pp 
);
template <class Q>
static HRESULT CreateInstance(
   IUnknown* punkOuter,
   Q** pp 
);

パラメーター

  • Q
    ppによって返される必要のある COM インターフェイスは説明します。

  • punkOuter
    [入力]集計の外部の未知またはコントロールのワイルドカード。

  • pp
    [入力]作成が成功した場合は、要求されたインターフェイス ポインターを受け取るポインター変数のアドレス。

戻り値

標準の HRESULT 値。可能な戻り値の説明については Windows SDK の CoCreateInstance を参照してください。

解説

一般的なオブジェクトを作成するために、この関数の最初のオーバーロードを使用してください; 作成されたオブジェクトを集約する必要がある場合に 2 番目のオーバーロードを使用します。

必要な COM オブジェクト ( CComCoClassに最初のテンプレート パラメーターとして使用されるクラス) を実装する ATL クラスは、呼び出し元のコードと同じプロジェクト内である必要があります。COM オブジェクトの作成は、この ATL クラスに対して登録されているクラス ファクトリによって実行されます。

これらの関数は OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO のマクロを使用して外部で作成可能であることから防いだことに作成する場合に役立ちますオブジェクトです。これらは効率理由から COM API を回避する必要がある場合にも便利です。

インターフェイス Q は __uuidof の演算子を使用して取得できる、関連付けられた IID があることに注意してください。

使用例

次の例では、CDocument は CComCoClass から派生した IDocument のインターフェイスを実装するウィザードで生成された ATL クラスです。クラスは OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO マクロのオブジェクト マップに登録されます。クライアントは CoCreateInstanceを使用してドキュメントのインスタンスを作成できません。CApplication は、ドキュメント クラスのインスタンスを作成するための独自の COM インターフェイスの 1 つがでメソッドを提供するコクラスです。次のコードでは、どのくらい簡単にドキュメントのインスタンスを作成する場合は CComCoClass の基本クラスから継承された CreateInstance のメンバーを使用して分類します。

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

必要条件

ヘッダー: atlcom.h

参照

関連項目

CComCoClass クラス