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 구조체의 배열입니다. 자세한 내용은 설명 부분을 참조하세요.
반환 값
이 메서드는 다음 값을 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
메서드는 요청된 모든 인터페이스에 대한 포인터를 검색했습니다. |
|
메서드는 요청된 인터페이스의 일부(전부는 아님)에 대한 포인터를 검색했습니다. |
|
메서드는 요청된 인터페이스 중 어느 것도 검색하지 않은 포인터를 검색했습니다. |
설명
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 Professional [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | objidl.h(ObjIdl.h 포함) |