IMultiQI::QueryMultipleInterfaces 方法 (objidl.h)

检索指向对象上多个支持的接口的指针。

调用此方法等效于发出一系列单独的 QueryInterface 调用,但不会产生相应数量的 RPC 调用的开销。 在多线程应用程序和分布式环境中,将 RPC 调用保持在最低水平对于获得最佳性能至关重要。

语法

HRESULT QueryMultipleInterfaces(
  [in]      ULONG    cMQIs,
  [in, out] MULTI_QI *pMQIs
);

参数

[in] cMQIs

pMQIs 数组中的元素数。

[in, out] pMQIs

MULTI_QI结构的数组。 有关详细信息,请参阅“备注”。

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
方法检索了指向所有请求接口的指针。
S_FALSE
方法检索了指向某些(但不是全部)所请求接口的指针。
E_NOINTERFACE
方法检索了指向任何请求的接口的指针。

注解

QueryMultipleInterfaces 方法采用MULTI_QI结构的数组作为输入。 每个结构指定一个接口 IID,并包含两个用于接收接口指针和返回值的附加成员。

此方法直接从对象代理获取尽可能多的请求接口指针。 对于代理上未实现的每个接口,方法调用服务器以获取指针。 从服务器接收接口指针后,该方法将生成相应的接口代理,并返回其指针以及指向已实现的接口的指针。

给调用方的说明

调用方应首先查询 IMultiQI 接口的对象代理。 如果对象代理返回指向此接口的指针,则调用方应为其要获取的每个接口创建 一个MULTI_QI 结构。 每个结构都应指定一个接口 IID,并将其 pItf 成员设置为 NULL。 未能将 pItf 成员设置为 NULL 将导致对象代理忽略结构。

返回时, QueryMultipleInterfaces 将请求的接口指针和返回值写入客户端数组中的每个 MULTI_QI 结构中。 pItf 成员接收指针;hr 成员接收返回值。

如果从对 QueryMultipleInterfaces 的 调用返回的值S_OK,则为所有请求的接口返回指针。

如果返回值为E_NOINTERFACE,则返回任何请求的接口的指针。 如果返回值为S_FALSE,则不会返回指向一个或多个请求接口的指针。 在这种情况下,客户端应检查每个MULTI_QI结构的 hr 成员,以确定获取的接口和未获取的接口。

如果客户端提前知道将使用对象的多个接口,则可以提前调用 QueryMultipleInterfaces,然后,如果对已通过 QueryMultipleInterfaces 获取的某个接口执行 QueryInterface,则无需调用 RPC。

返回时,调用方应检查每个MULTI_QI结构的 hr 成员,以确定返回和未返回的接口指针。

客户端负责通过调用 Release 释放获取的每个接口。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidl.h (包括 ObjIdl.h)

另请参阅

IMultiQI