Compartir a través de


IServiceProviderImpl::QueryService

Crea o tiene acceso al servicio especificado y devuelve un puntero de interfaz a la interfaz especificada para el servicio.

STDMETHOD(QueryService)( 
   REFGUID guidService, 
   REFIID riid, 
   void** ppvObject  
);

Parámetros

  • [IN] guidService
    Puntero a un identificador (SID) del servicio.

  • [IN] riid
    Identificador de la interfaz en la que el llamador debe obtener acceso.

  • [OUT] ppvObj
    Puntero indirecto a la interfaz solicitada.

Valor devuelto

El valor devuelto de HRESULT es uno de los siguientes:

Valor devuelto

Significado

S_OK

El servicio se creó o recuperado correctamente.

E_INVALIDARG

Uno o varios argumentos no son válidos.

E_OUTOFMEMORY

La memoria es insuficiente para crear el servicio.

E_UNEXPECTED

Error desconocido.

E_NOINTERFACE

La interfaz solicitada no forma parte de este servicio, o el servicio es desconocido.

Comentarios

QueryService devuelve un puntero indirecto a la interfaz solicitada en el servicio especificado. El llamador es responsable de liberar este puntero cuando ya no es necesario.

Cuando se llama a QueryService, pasa un identificador de servicio (guidService) y un identificador de interfaz (riid). guidService especifica el servicio al que desee tener acceso, y riid identifica una interfaz que forma parte del servicio. A cambio, recibe un puntero indirecto a la interfaz.

El objeto que implementa la interfaz también podría implementar interfaces que forman parte de otros servicios. Tenga en cuenta lo siguiente:

  • Algunas de estas interfaces pueden ser opcionales. No todas las interfaces definidas en la descripción de servicio son necesariamente presentes en cada implementación de servicio o en cada objeto devuelto.

  • A diferencia de llamadas a QueryInterface, pasar un identificador diferente del servicio no significa necesariamente que otro objeto de (COM) del modelo de objetos componentes está devuelto.

  • El objeto devuelto podría tener interfaces adicionales que no forman parte de la definición del servicio.

Dos diferentes servicios, como SID_SMyService y SID_SYourService, pueden especificar el uso de la misma interfaz, aunque la implementación de la interfaz puede no tener nada en común entre los dos servicios. Esto funciona, porque una llamada a QueryService (SID_SMyService, IID_IDispatch) puede devolver un objeto que QueryService (SID_SYourService, IID_IDispatch). La identidad de objeto no se supone cuando se especifica un identificador diferente del servicio.

Requisitos

encabezado: atlcom.h

Vea también

Referencia

IServiceProviderImpl Class

BEGIN_SERVICE_MAP