IServiceProviderImpl::QueryService
Cria ou acessa o serviço especificado e retorna um ponteiro de interface à interface especificada para o serviço.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parâmetros
[IN] guidService
Ponteiro para um identificador de serviço (SID).[IN] riid
Identificador de interface para a qual o chamador deve obter acesso.[OUT] ppvObj
Ponteiro indireto para a interface solicitada.
Valor de retorno
O retornadoHRESULT valor é uma das seguintes opções:
Valor de Retorno |
Significado |
---|---|
S_OK |
O serviço foi criado com êxito ou recuperado. |
E_INVALIDARG |
Um ou mais argumentos são inválidos. |
E_OUTOFMEMORY |
Memória insuficiente criar o serviço. |
E_UNEXPECTED |
Ocorreu um erro desconhecido. |
E_NOINTERFACE |
A interface solicitada não é parte do serviço ou o serviço é desconhecido. |
Comentários
QueryService Retorna um ponteiro indireto para a interface solicitada no serviço especificado. O chamador é responsável por liberando esse ponteiro quando ele não é mais necessário.
Quando você chama QueryService, você passa ambos os uma (identificador de serviçoguidService) e um (identificador de interfaceriid). The guidService Especifica o serviço para a qual você deseja acessar, e o riid identifica uma interface que é parte do serviço. Em retorno, você recebe um ponteiro indireto à interface.
O objeto que implementa a interface também pode implementar interfaces que fazem parte de outros serviços.Considere o seguinte:
Algumas dessas interfaces podem estar opcionais.Nem todas as interfaces definidas na descrição do serviço estão presentes necessariamente em cada implementação do serviço ou em cada objeto retornado.
Diferentemente de chamadas para QueryInterface, passar um identificador de serviço diferentes não significa necessariamente que será retornado um objeto COM (componente Object Model) diferentes.
O objeto retornado pode ter interfaces adicionais que não fazem parte da definição do serviço.
Dois serviços diferentes, tais sistema autônomo SID_SMyService e SID_SYourService, podem ambos especificar o uso da mesma interface, mesmo que a implementação da interface talvez tenham nada em comum entre sistema autônomo dois serviços.Isso funciona, porque uma telefonar para QueryService (SID_SMyService, IID_IDispatch) pode retornar um objeto diferente de QueryService (SID_SYourService, IID_IDispatch). Identidade do objeto não será usada quando você especifica um identificador de serviço diferentes.
Requisitos
Cabeçalho: atlcom.h