IServiceProviderImpl::QueryService
Cria ou acessa o serviço especificado e retorna um ponteiro de interface para a interface especificada para o serviço.
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