IServiceProviderImpl::QueryService
Publicado: abril de 2016
Cria ou acessa o serviço especificado e retorna um ponteiro de interface para a interface especificada para o serviço.
Sintaxe
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parâmetros
[IN] guidService
Ponteiro para um identificador (SID) do serviço.[IN] riid
Identificador de interface para que este deve conceder acesso.[OUT] ppvObj
Ponteiro indireta a interface solicitada.
Valor de retorno
O valor retornado de HRESULT é um dos seguintes:
Valor de Retorno |
Significado |
---|---|
S_OK |
O serviço foi criado com êxito ou recuperados. |
E_INVALIDARG |
Um ou mais dos argumentos são inválidos. |
E_OUTOFMEMORY |
A memória insuficientes para criar o serviço. |
E_UNEXPECTED |
Um erro ocorreu desconhecido. |
E_NOINTERFACE |
A interface solicitada não é parte de esse serviço, ou o serviço é conhecido. |
Comentários
QueryService retorna um ponteiro indireta a interface solicitada no serviço especificado. O chamador é responsável para liberar esse ponteiro quando ele não for necessário.
Quando você chama QueryService, você passa um identificador de serviço (guidService) e um identificador de interface (riid). guidService especifica o serviço a que você deseja acesso, e riid identifica uma interface que é parte do serviço. Em retorno, você receberá um ponteiro indireta a interface.
O objeto que implementa a interface também pode implementar as interfaces que fazem parte de outros serviços. Considere o seguinte:
Algumas de essas interfaces podem ser opcionais. Nem todas as interfaces definidas na descrição de serviço são necessariamente atuais em cada implementação de serviço ou em cada objeto retornado.
A o contrário das chamadas para QueryInterface, passe um identificador diferente de serviço não necessariamente significa que um objeto diferente do Component Object Model (COM) será retornado.
O objeto retornado pode ter as interfaces adicionais que não são parte da definição de serviço.
Dois serviços diferentes, como SID_SMyService e SID_SYourService, podem especificar o uso da mesma interface, mesmo que a implementação da interface pode não ter nada em comum entre os dois serviços. Isso funciona, porque uma chamada para QueryService (SID_SMyService, IID_IDispatch) pode retornar um objeto diferente do que QueryService (SID_SYourService, IID_IDispatch). A identidade do objeto não é assumida quando você especifica um identificador diferente de serviço.
Requisitos
Cabeçalho: atlcom.h