IMultiQI::QueryMultipleInterfaces メソッド (objidl.h)
オブジェクトでサポートされている複数のインターフェイスへのポインターを取得します。
このメソッドの呼び出しは、対応する数の RPC 呼び出しのオーバーヘッドが発生しない点を除き、一連の個別の QueryInterface 呼び出しを発行することと同じです。 マルチスレッド アプリケーションと分散環境では、最適なパフォーマンスを得るには RPC 呼び出しを最小限に抑える必要があります。
構文
HRESULT QueryMultipleInterfaces(
[in] ULONG cMQIs,
[in, out] MULTI_QI *pMQIs
);
パラメーター
[in] cMQIs
pMQIs 配列内の要素の数。
[in, out] pMQIs
MULTI_QI構造体の配列。 詳細については、「解説」を参照してください。
戻り値
このメソッドは、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
メソッドは、要求されたすべてのインターフェイスへのポインターを取得しました。 |
|
メソッドは、要求されたインターフェイスの一部 (すべてではない) へのポインターを取得しました。 |
|
メソッドは、要求されたインターフェイスのいずれにもポインターを取得しません。 |
注釈
QueryMultipleInterfaces メソッドは、MULTI_QI構造体の配列を入力として受け取ります。 各構造体はインターフェイス IID を指定し、インターフェイス ポインターと戻り値を受け取るための 2 つの追加メンバーを含みます。
このメソッドは、要求されたインターフェイス ポインターをできるだけ多くオブジェクト プロキシから直接取得します。 プロキシに実装されていないインターフェイスごとに、 メソッドはサーバーを呼び出してポインターを取得します。 サーバーからインターフェイス ポインターを受け取ると、メソッドは対応するインターフェイス プロキシをビルドし、既に実装されているインターフェイスへのポインターと共にそのポインターを返します。
呼び出し元へのメモ
呼び出し元は、 IMultiQI インターフェイスのオブジェクト プロキシに対してクエリを実行することから始める必要があります。 オブジェクト プロキシがこのインターフェイスへのポインターを返す場合、呼び出し元は、取得するインターフェイスごとに MULTI_QI 構造体を作成する必要があります。 各構造体はインターフェイス IID を指定し、その pItf メンバーを NULL に設定する必要があります。 pItf メンバーを NULL に設定しないと、オブジェクト プロキシは構造体を無視します。返されると、 QueryMultipleInterfaces は、要求されたインターフェイス ポインターと戻り値をクライアントの配列内の各 MULTI_QI 構造体に書き込みます。 pItf メンバーはポインターを受け取ります。hr メンバーは戻り値を受け取ります。
QueryMultipleInterfaces の呼び出しから返された値がS_OK場合は、要求されたすべてのインターフェイスに対してポインターが返されます。
戻り値がE_NOINTERFACEの場合は、要求されたインターフェイスに対してポインターが返されませんでした。 戻り値がS_FALSE場合、1 つ以上の要求されたインターフェイスへのポインターは返されませんでした。 この場合、クライアントは各MULTI_QI構造体の hr メンバーをチェックして、取得されたインターフェイスと取得されなかったインターフェイスを決定する必要があります。
クライアントがオブジェクトの複数のインターフェイスを使用することを事前に認識している場合は、QueryMultipleInterfaces を事前に呼び出すことができます。その後、QueryMultipleInterfaces を使用して既に取得されているインターフェイスの 1 つに対して QueryInterface を実行した場合、RPC 呼び出しは必要ありません。
返された場合、呼び出し元は各MULTI_QI構造体の hr メンバーをチェックして、返されたインターフェイス ポインターと返されなかったインターフェイス ポインターを判断する必要があります。
クライアントは、Release を呼び出して、取得した各インターフェイスを 解放する役割を担います。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | objidl.h (ObjIdl.h を含む) |