Partilhar via


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

Consulte também

Referência

Classe de IServiceProviderImpl

BEGIN_SERVICE_MAP