Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Esta classe fornece uma implementação padrão da IServiceProvider interface.
Sintaxe
template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider
Parâmetros
T
A sua classe, derivada de IServiceProviderImpl.
Membros
Métodos Públicos
| Nome | Description |
|---|---|
| IServiceProviderImpl::QueryService | Cria ou acede ao serviço especificado e devolve um ponteiro de interface para a interface especificada para o serviço. |
Observações
A IServiceProvider interface localiza um serviço especificado pelo seu GUID e devolve o ponteiro da interface solicitada no serviço. Class IServiceProviderImpl fornece uma implementação padrão desta interface.
IServiceProviderImpl especifica um método: QueryService, que cria ou acede ao serviço especificado e devolve um ponteiro de interface para a interface especificada para o serviço.
IServiceProviderImpl Utiliza um mapa de serviço, começando por BEGIN_SERVICE_MAP e terminando por END_SERVICE_MAP.
O mapa de serviço contém duas entradas: SERVICE_ENTRY, que indica um ID de serviço (SID) especificado suportado pelo objeto, e SERVICE_ENTRY_CHAIN, que chama QueryService para encadear outro objeto.
Hierarquia de herança
IServiceProvider
IServiceProviderImpl
Requerimentos
Cabeçalho: atlcom.h
IServiceProviderImpl::QueryService
Cria ou acede ao serviço especificado e devolve um ponteiro de interface para a interface especificada para o serviço.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject);
Parâmetros
guidService
[dentro] Apontador para um identificador de serviço (SID).
riid
[dentro] Identificador da interface à qual o chamador deve obter acesso.
ppvObj
[fora] Ponteiro indireto para a interface solicitada.
Valor de retorno
O valor HRESULT devolvido é um dos seguintes:
| Valor de retorno | Meaning |
|---|---|
| S_OK | O serviço foi criado ou recuperado com sucesso. |
| E_INVALIDARG | Um ou mais dos 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 deste serviço, ou o serviço é desconhecido. |
Observações
QueryService devolve um ponteiro indireto para a interface solicitada no serviço especificado. O chamador é responsável por libertar este ponteiro quando já não for necessário.
Quando chama QueryService, passa tanto um identificador de serviço (guidService) como um identificador de interface (riid). O guidService especifica o serviço ao qual pretende aceder e o riid identifica uma interface que faz parte do serviço. Em troca, recebe um ponteiro indireto para a interface.
O objeto que implementa a interface pode também implementar interfaces que fazem parte de outros serviços. Considere o seguinte:
Algumas destas interfaces podem ser opcionais. Nem todas as interfaces definidas na descrição do serviço estão necessariamente presentes em todas as implementações do serviço ou em todos os objetos retornados.
Ao contrário das chamadas para
QueryInterface, passar um identificador de serviço diferente não significa necessariamente que um objeto diferente do Modelo de Objeto Componente (COM) seja devolvido.O objeto devolvido 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 ambos especificar o uso da mesma interface, mesmo que a implementação da interface possa não ter nada em comum entre os dois serviços. Isto funciona, porque uma chamada a QueryService (SID_SMyService, IID_IDispatch) pode devolver um objeto diferente de QueryService (SID_SYourService, IID_IDispatch). A identidade do objeto não é assumida quando especifica um identificador de serviço diferente.