CComCoClass::CreateInstance
更新 : 2007 年 11 月
これらの CreateInstance 関数を使用して COM オブジェクトのインスタンスを作成し、COM API を使用せずにインターフェイス ポインタを取得します。
template <class Q>
static HRESULT CreateInstance(
Q** pp
);
template <class Q>
static HRESULT CreateInstance(
IUnknown* punkOuter,
Q** pp
);
パラメータ
Q
pp 経由で返す COM インターフェイス。punkOuter
[入力] 集約の外側の IUnknown (制御側の IUnknown)。pp
[出力] 正常に作成できた場合は、要求されたインターフェイス ポインタを受け取るポインタ変数のアドレス。
戻り値
標準の HRESULT 値。戻り値の詳細については、Windows SDK の「CoCreateInstance」を参照してください。
解説
標準的なオブジェクトの作成には、この関数の最初のオーバーロードを使用し、作成するオブジェクトを集約する必要がある場合は、2 番目のオーバーロードを使用します。
要求される COM オブジェクト (CComCoClass への最初のテンプレート パラメータとして使用されるクラス) を実装している ATL (Active Template Library) クラスは、呼び出しコードと同じプロジェクトに配置されている必要があります。COM オブジェクトの作成は、この ATL に登録されたクラス ファクトリによって実行されます。
これらの関数がオブジェクトの作成に役立つのは、OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO マクロを使用して外部作成を禁止したオブジェクトの場合です。また、効率を上げるために COM API の使用を避ける場合にも役立ちます。
インターフェイス Q には、__uuidof 演算子を使用して取得できる IID が関連付けられている必要があります。
使用例
次の例の CDocument は、IDocument インターフェイスを実装する CComCoClass から派生したウィザード生成 ATL クラスです。このクラスは OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO マクロを使用してオブジェクト マップに登録されるため、クライアントは CoCreateInstance を使用してドキュメントのインスタンスを作成することができません。CApplication は、ドキュメント クラスのインスタンスを作成するメソッドを独自の COM インターフェイスの 1 つに提供する CoClass です。次のコードが示すように、CComCoClass 基本クラスから継承した CreateInstance メンバを使用すると、ドキュメント クラスのインスタンスを簡単に作成できます。
STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
*ppDoc = NULL;
return CMyDoc::CreateInstance(ppDoc);
}
必要条件
ヘッダー : atlcom.h