次の方法で共有


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 として使用されることを示します。 現在、集計はクロスプロセスまたはコンピューター間ではサポートされていません。 プロセス外でオブジェクトをインスタンス化すると、 punkOuterNULL 以外の場合、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標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
成功を示します。
REGDB_E_CLASSNOTREG
指定したクラスが登録データベースに登録されていません。 CLSCTX 列挙で要求したサーバーの種類が登録されていないか、レジストリ内のサーバーの種類の値が破損していることを示すこともできます。
CLASS_E_NOAGGREGATION
このクラスを集計の一部として作成することはできません。
CO_S_NOTALLINTERFACES
少なくとも 1 つが、 pResults 配列で要求されたすべてのインターフェイスが正常に取得されたわけではありません。 pResults各MULTI_QI構造体の hr メンバーは、特定のインターフェイスが返されたかどうかをS_OKまたはE_NOINTERFACEで示します。
E_NOINTERFACE
pResults 配列で要求されたインターフェイスはいずれも正常に取得されませんでした。

注釈

CoCreateInstanceEx は、指定された CLSID に関連付けられた 1 つの初期化されていないオブジェクトを、指定されたリモート コンピューターに作成します。 これは、ローカル コンピューターでのみオブジェクトを作成する CoCreateInstance 関数の拡張機能です。 さらに、 CoCreateInstanceEx では、単一のインターフェイスを要求してそのインターフェイスへの単一のポインターを取得するのではなく、構造体の配列を指定できます。各構造体は、入力時にインターフェイス識別子 (IID) を指し、戻り値には、要求されたインターフェイスへのポインターと、そのインターフェイスの QueryInterface 呼び出しの戻り値を含みます 。 これにより、コンピューター間のラウンド トリップが少なくなります。

この関数は、3 つの呼び出しをカプセル化します。まず、 CoGetClassObject に対して、クラスの場所を指定して、指定した CLSID に関連付けられたクラス オブジェクトに接続します。次に、 IClassFactory::CreateInstance に初期化されていないインスタンスを作成し、最後に IClassFactory::Release に移動してクラス オブジェクトを解放します。

作成されたオブジェクトは、初期化インターフェイスの 1 つ ( IPersistStorage::Load など) の呼び出しを通じて初期化する必要があります。 CoGetInstanceFromFileCoGetInstanceFromIStorage の 2 つの関数は、明らかなソースからのインスタンスの作成と初期化の両方をカプセル化します。

pServerInfo パラメーターとして渡される COSERVERINFO 構造体には、指定したオブジェクトの新しいインスタンスを作成するときに COM が使用するセキュリティ設定が含まれています。 このパラメーターは、インスタンス化されたオブジェクトに対してメソッド呼び出しを行うときに使用されるセキュリティ設定には影響しないことに注意してください。 これらのセキュリティ設定は、 CoSetProxyBlanket 関数を使用して、インターフェイスごとに構成できます。 「 IClientSecurity::SetBlanket」も参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

CoGetInstanceFromFile

CoGetInstanceFromIStorage