次の方法で共有


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

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム ウィンドウズ
ヘッダー comsvcs.h

関連項目

IObjectContext