Método IRegisterServiceProvider::RegisterService (strmif.h)
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
El RegisterService
método registra un objeto como servicio.
Sintaxis
HRESULT RegisterService(
[in] REFGUID guidService,
[in] IUnknown *pUnkObject
);
Parámetros
[in] guidService
Identificador de servicio (SID) del servicio.
[in] pUnkObject
Puntero a la interfaz IUnknown del objeto de servicio o NULL para anular el registro del servicio.
Valor devuelto
Devuelve un valor HRESULT .
Comentarios
Un servicio es una interfaz que un cliente detecta a través del método COM IServiceProvider::QueryService , en lugar de a través del método IUnknown::QueryInterface habitual. La diferencia entre los dos métodos es que QueryInterface devuelve una interfaz en el objeto original, mientras que QueryService puede devolver una interfaz en otro objeto. (Más precisamente, QueryInterface garantiza que puede consultar la interfaz original y la interfaz devuelta para IUnknown, y obtendrá punteros idénticos. QueryService no tiene esta garantía).
El RegisterService
método permite registrar un servicio con el Administrador de gráficos de filtros. A continuación, otros objetos pueden usar la interfaz IServiceProvider para recuperar el objeto. Esto facilita la comunicación entre objetos COM independientes, mediante el Administrador de gráficos de filtros como punto de comunicación central.
Un servicio se identifica mediante un GUID, denominado identificador de servicio (SID). Un servicio puede admitir varias interfaces. Para registrar el servicio, llame a RegisterService
, como se muestra en el código siguiente:
C++ |
---|
DEFINE_GUID(SID_MyService, ....); IRegisterServiceProvider *pRSP; hr = pGraph->QueryInterface(IID_IRegisterServiceProvider, (void**)&pRSP); if (SUCCEEDED(hr)) { IUnknown pServiceObj; MyCreateServiceHelper(SID_MyService, &pServiceObj); pRSP->RegisterService(SID_MyService, pServiceObj); pRSP->Release(); pServiceObj->Release(); } |
C++ |
---|
IServiceProvider *pSP; hr = pGraph->QueryInterface(IID_IServiceProvider, (void**)&pSP); if (SUCCEEDED(hr)) { ISomeInterface *pService; hr = pSP->QueryService(SID_MyService, IID_ISomeInterface, (void**)&pService); pSP->Release(); if (SUCCEEDED(hr)) { pService->SomeMethod(); pService->Release(); } }; |
RegisterService
con un puntero NULL en el segundo parámetro:C++ |
---|
pRSP->RegisterService(SID_MyService, NULL); |
Filter Graph Manager mantiene un recuento de referencias en el objeto de servicio hasta que el servicio no se registra. Para evitar recuentos de referencia circulares, el objeto de servicio no debe contener un recuento de referencias en el Administrador de gráficos de filtros. Por ejemplo, no puede usar el método destructor del objeto de servicio para anular el registro del servicio, ya que siempre que el servicio contenga un recuento de referencias en el Administrador de gráficos de filtros, nunca se llamará al destructor. Una solución consiste en crear un objeto independiente que registre y anule el registro del servicio. O bien, simplemente puede liberar el objeto de servicio después de registrarlo y dejar que el Administrador de graph de filtros controle su duración.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | strmif.h (incluya Dshow.h) |
Library | Strmiids.lib |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de