IObjectContext::CreateInstance メソッド (comsvcs.h)

現在のオブジェクトのコンテキストを使用してオブジェクトを作成します。

構文

HRESULT CreateInstance(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

パラメーター

[in] rclsid

インスタンス化するオブジェクトの型の CLSID。

[in] riid

インスタンス化するオブジェクトによって実装される任意のインターフェイス。

[out] ppv

新しい オブジェクトで要求されたインターフェイスへの参照。 インスタンス化に失敗した場合、このパラメーターは NULL に設定されます。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
REGDB_E_CLASSNOTREG
clsid で指定されたコンポーネントは、COM コンポーネントとして登録されていません。
E_OUTOFMEMORY
オブジェクトをインスタンス化するのに十分なメモリがありません。
E_INVALIDARG
ppvObj パラメーターで渡された引数が無効です。
E_UNEXPECTED
予期しないエラーが発生しました。 これは、あるオブジェクトが IObjectContext ポインターを別のオブジェクトに渡し、もう一方のオブジェクトがこのポインターを使用して CreateInstance を 呼び出した場合に発生する可能性があります。 IObjectContext ポインターは、最初に取得したオブジェクトのコンテキストの外部では有効ではありません。

注釈

CreateInstance は COM オブジェクトを作成します。 ただし、オブジェクトには、そのコンポーネントが COM+ に登録されている場合にのみコンテキストがあります。

CreateInstance を使用してオブジェクトを作成すると、新しいオブジェクトのコンテキストは、現在のオブジェクトの IObjectContext と、新しいオブジェクトのコンポーネントの宣言型プロパティから派生します。 新しいオブジェクトは、常に、それを作成したオブジェクトと同じアクティビティ内で実行されます。 現在のオブジェクトにトランザクションがある場合、新しいオブジェクトのコンポーネントの transaction 属性によって、そのトランザクションのスコープ内で新しいオブジェクトが実行されるかどうかが決まります。

コンポーネントの transaction 属性設定でトランザクションが必要な場合、またはトランザクションをサポートしている場合、新しいオブジェクトはその作成者のトランザクションを継承します。 コンポーネントの transaction 属性に新しいトランザクションが必要な場合、COM+ は新しいオブジェクトの新しいトランザクションを開始します。 コンポーネントの transaction 属性がトランザクションをサポートしていない場合、新しいオブジェクトはどのトランザクションでも実行されません。

CreateInstance は常に、新しくインスタンス化されたオブジェクトの IUnknown インターフェイスを返します。 返された値は、新しいオブジェクトと通信するインターフェイスにすぐにキャストする必要があります。 riid パラメーターで渡すインターフェイス ID は、戻り値をキャストするインターフェイスと同じである必要はありませんが、インスタンス化するオブジェクトによって実装されるインターフェイスである必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー comsvcs.h

こちらもご覧ください

IObjectContext