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