CoCreateInstanceEx 関数 (combaseapi.h)
特定のコンピューター上の特定のクラスのインスタンスを作成します。
構文
HRESULT CoCreateInstanceEx(
[in] REFCLSID Clsid,
[in] IUnknown *punkOuter,
[in] DWORD dwClsCtx,
[in] COSERVERINFO *pServerInfo,
[in] DWORD dwCount,
[in, out] MULTI_QI *pResults
);
パラメーター
[in] Clsid
作成するオブジェクトの CLSID。
[in] punkOuter
このパラメーターが NULL 以外の場合は、インスタンスが集計の一部として作成され、 punkOuter が新しいインスタンスの制御 IUnknown として使用されることを示します。 現在、集計はクロスプロセスまたはコンピューター間ではサポートされていません。 プロセス外でオブジェクトをインスタンス化すると、 punkOuter が NULL 以外の場合、CLASS_E_NOAGGREGATIONが返されます。
[in] dwClsCtx
CLSCTX 列挙からの値。
[in] pServerInfo
オブジェクトをインスタンス化するコンピューターに関する情報。 「COSERVERINFO」を参照してください。 このパラメーターには NULL を指定できます。この場合、オブジェクトはローカル コンピューターでインスタンス化されるか、dwClsCtx パラメーターの解釈に従って、クラスの RemoteServerName 値の下のレジストリで指定されたコンピューターでインスタンス化されます。
[in] dwCount
pResults 内の構造体の数。 この値は 0 より大きくする必要があります。
[in, out] pResults
MULTI_QI構造体の配列。 各構造体には、要求されたインターフェイス (pIID) の識別子、インターフェイス ポインター (pItf) を返す場所、 QueryInterface (hr) の呼び出しの戻り値の 3 つのメンバーがあります。
戻り値
この関数は、E_INVALIDARG標準の戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
成功を示します。 |
|
指定したクラスが登録データベースに登録されていません。 CLSCTX 列挙で要求したサーバーの種類が登録されていないか、レジストリ内のサーバーの種類の値が破損していることを示すこともできます。 |
|
このクラスを集計の一部として作成することはできません。 |
|
少なくとも 1 つが、 pResults 配列で要求されたすべてのインターフェイスが正常に取得されたわけではありません。 pResults の各MULTI_QI構造体の hr メンバーは、特定のインターフェイスが返されたかどうかをS_OKまたはE_NOINTERFACEで示します。 |
|
pResults 配列で要求されたインターフェイスはいずれも正常に取得されませんでした。 |
注釈
CoCreateInstanceEx は、指定された CLSID に関連付けられた 1 つの初期化されていないオブジェクトを、指定されたリモート コンピューターに作成します。 これは、ローカル コンピューターでのみオブジェクトを作成する CoCreateInstance 関数の拡張機能です。 さらに、 CoCreateInstanceEx では、単一のインターフェイスを要求してそのインターフェイスへの単一のポインターを取得するのではなく、構造体の配列を指定できます。各構造体は、入力時にインターフェイス識別子 (IID) を指し、戻り値には、要求されたインターフェイスへのポインターと、そのインターフェイスの QueryInterface 呼び出しの戻り値を含みます 。 これにより、コンピューター間のラウンド トリップが少なくなります。
この関数は、3 つの呼び出しをカプセル化します。まず、 CoGetClassObject に対して、クラスの場所を指定して、指定した CLSID に関連付けられたクラス オブジェクトに接続します。次に、 IClassFactory::CreateInstance に初期化されていないインスタンスを作成し、最後に IClassFactory::Release に移動してクラス オブジェクトを解放します。
作成されたオブジェクトは、初期化インターフェイスの 1 つ ( IPersistStorage::Load など) の呼び出しを通じて初期化する必要があります。 CoGetInstanceFromFile と CoGetInstanceFromIStorage の 2 つの関数は、明らかなソースからのインスタンスの作成と初期化の両方をカプセル化します。
pServerInfo パラメーターとして渡される COSERVERINFO 構造体には、指定したオブジェクトの新しいインスタンスを作成するときに COM が使用するセキュリティ設定が含まれています。 このパラメーターは、インスタンス化されたオブジェクトに対してメソッド呼び出しを行うときに使用されるセキュリティ設定には影響しないことに注意してください。 これらのセキュリティ設定は、 CoSetProxyBlanket 関数を使用して、インターフェイスごとに構成できます。 「 IClientSecurity::SetBlanket」も参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | combaseapi.h (Objbase.h を含む) |
Library | Ole32.lib |
[DLL] | Ole32.dll |