Partilhar via


IServiceProviderImpl Class

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.

Consulte também

Visão geral da classe