IRegisterServiceProvider::RegisterService 方法 (strmif.h)
[與此頁面相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式代碼盡可能重寫為使用新的 API。
方法 RegisterService
會將物件註冊為服務。
語法
HRESULT RegisterService(
[in] REFGUID guidService,
[in] IUnknown *pUnkObject
);
參數
[in] guidService
服務標識子 (SID) 服務。
[in] pUnkObject
服務物件的 IUnknown 介面指標,或 NULL 來取消註冊服務。
傳回值
傳回 HRESULT 值。
備註
服務是用戶端透過 COM IServiceProvider::QueryService 方法探索的介面,而不是透過一般的 IUnknown::QueryInterface 方法。 這兩種方法之間的差異在於 QueryInterface 會傳回原始物件上的介面,而 QueryService 可能會傳回另一個物件的介面。 (更精確地說, QueryInterface 保證您可以查詢原始介面和 IUnknown 傳回的介面,而您會收到相同的指標。 QueryService 沒有此保證。)
方法 RegisterService
可讓您向 Filter Graph 管理員註冊服務。 其他物件接著可以使用 IServiceProvider 介面來擷取物件。 這可促進不同 COM 對象之間的通訊,使用 Filter Graph Manager 作為中央通訊點。
服務是由 GUID 識別,稱為服務標識碼 (SID) 。 一個服務可以支援多個介面。 若要註冊服務,請呼叫 RegisterService
,如下列程式代碼所示:
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
:C++ |
---|
pRSP->RegisterService(SID_MyService, NULL); |
Filter Graph Manager 會保留服務對象的參考計數,直到服務取消註冊為止。 若要防止迴圈參考計數,服務對象不應該在篩選圖形管理員上保存參考計數。 例如,您無法使用服務物件的解構函式方法來取消註冊服務,因為只要服務在 Filter Graph Manager 上保存參考計數,則永遠不會呼叫解構函式。 其中一個解決方案是建立個別的物件,以註冊和取消註冊服務。 或者,您只要在註冊服務對象之後釋出服務物件,並讓 Filter Graph Manager 控制其存留期。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | strmif.h (包含 Dshow.h) |
程式庫 | Strmiids.lib |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱提交並檢視相關的意見反應