Compartir a través de


IServiceProviderImpl (clase)

Nota:

La biblioteca de plantillas activas (ATL) sigue siendo compatible. Sin embargo, ya no estamos agregando características ni actualizando la documentación.

Esta clase proporciona una implementación predeterminada de la interfaz IServiceProvider.

Sintaxis

template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider

Parámetros

T
La clase, que se deriva de IServiceProviderImpl.

Miembros

Métodos públicos

Nombre Descripción
IServiceProviderImpl::QueryService Crea o accede al servicio especificado y devuelve un puntero de interfaz a la interfaz especificada para el servicio.

Comentarios

La interfaz IServiceProvider localiza un servicio especificado por su GUID y devuelve el puntero de interfaz para la interfaz solicitada en el servicio. La clase IServiceProviderImpl proporciona una implementación predeterminada de esta interfaz.

IServiceProviderImpl especifica un método QueryService, que crea o accede al servicio especificado y devuelve un puntero de interfaz a la interfaz especificada para el servicio.

IServiceProviderImpl usa un mapa de servicio, empezando por BEGIN_SERVICE_MAP y finalizando con END_SERVICE_MAP.

El mapa de servicio contiene dos entradas: SERVICE_ENTRY, que indica un identificador de servicio (SID) especificado admitido por el objeto y SERVICE_ENTRY_CHAIN, que llama QueryService a encadenar a otro objeto.

Jerarquía de herencia

IServiceProvider

IServiceProviderImpl

Requisitos

Encabezado: atlcom.h

IServiceProviderImpl::QueryService

Crea o accede 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

guidService
[in] Puntero a un identificador de servicio (SID).

riid
[in] Identificador de la interfaz a la que el invocador va a acceder.

ppvObj
[out] Puntero indirecto a la interfaz solicitada.

Valor devuelto

El valor HRESULT devuelto es uno de los siguientes:

Valor devuelto Significado
S_OK El servicio se creó o recuperó correctamente.
E_INVALIDARG Uno o varios argumentos no son válidos.
E_OUTOFMEMORY La memoria no es suficiente 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 autor de la llamada es responsable de liberar este puntero cuando ya no es necesario.

Cuando se llama a QueryService, se pasa un identificador de servicio (guidService) y un identificador de interfaz (riid). GuidService especifica el servicio al que se desea acceder y el riid identifica una interfaz que forma parte del servicio. A cambio, se recibirá un puntero indirecto a la interfaz.

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

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

  • A diferencia de las llamadas a QueryInterface, pasar un identificador de servicio diferente no significa necesariamente que se devuelva un objeto de modelo de objetos componentes (COM) diferente.

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

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

Consulte también

Información general sobre la clase