Classe IServiceProviderImpl
Essa classe fornece uma implementação padrão da interface IServiceProvider
.
Sintaxe
template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider
Parâmetros
T
Sua classe, derivada de IServiceProviderImpl
.
Membros
Métodos públicos
Nome | Descrição |
---|---|
IServiceProviderImpl::QueryService | Cria ou acessa o serviço especificado e retorna um ponteiro de interface para a interface especificada para o serviço. |
Comentários
A interface IServiceProvider
localiza um serviço especificado pelo GUID e retorna o ponteiro de interface para a interface solicitada no serviço. A classe IServiceProviderImpl
fornece uma implementação padrão dessa interface.
IServiceProviderImpl
especifica um método: QueryService, que cria ou acessa o serviço especificado e retorna um ponteiro de interface para a interface especificada para o serviço.
IServiceProviderImpl
usa um mapa do serviço, começando com BEGIN_SERVICE_MAP e terminando com END_SERVICE_MAP.
O mapa do serviço contém duas entradas: SERVICE_ENTRY, que indica uma SID (ID de serviço) especificada compatível com o objeto, e SERVICE_ENTRY_CHAIN, que chama QueryService
para encadear para outro objeto.
Hierarquia de herança
IServiceProvider
IServiceProviderImpl
Requisitos
Cabeçalho: atlcom.h
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
guidService
[in] Ponteiro para um SID (identificador de serviço).
riid
[in] Identificador da interface à qual o chamador deve obter acesso.
ppvObj
[out] Ponteiro indireto para a interface solicitada.
Valor de retorno
O valor retornado de HRESULT é um dos seguintes valores:
Valor retornado | Significado |
---|---|
S_OK | O serviço foi criado ou recuperado com êxito. |
E_INVALIDARG | Um ou mais argumentos são inválidos. |
E_OUTOFMEMORY | A memória é insuficiente para criar o serviço. |
E_UNEXPECTED | Ocorreu um erro desconhecido. |
E_NOINTERFACE | A interface solicitada não faz parte desse 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 liberar esse ponteiro quando ele não é mais necessário.
Quando você chama QueryService
, passa um identificador de serviço (guidService) e um identificador de interface (riid). O guidService especifica o serviço ao qual você deseja acessar e o riid identifica uma interface que faz parte do serviço. Em troca, você recebe um ponteiro indireto para a 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 ser opcionais. Nem todas as interfaces definidas na descrição do serviço estão necessariamente presentes em cada implementação do serviço ou em cada objeto retornado.
Diferentemente das chamadas para
QueryInterface
, passar um identificador de serviço diferente não significa necessariamente que um objeto COM (Component Object Model) diferente seja retornado.O objeto retornado pode ter interfaces adicionais que não fazem parte da definição do serviço.
Dois serviços diferentes, como SID_SMyService e SID_SYourService, podem especificar o uso da mesma interface, embora a implementação da interface possa não ter nada em comum entre os dois serviços. Isso funciona, pois uma chamada para QueryService
(SID_SMyService, IID_IDispatch) pode retornar um objeto diferente de QueryService
(SID_SYourService, IID_IDispatch). A identidade do objeto não é assumida quando você especifica um identificador de serviço diferente.