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.