Compartir a través de


IServiceProviderImpl (clase)

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. Tenga 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