DLL 函式
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
本主題描述如何在 Microsoft DirectShow 中將元件實作為動態連結程式庫 (DLL) 。
DLL 必須實作下列函式,以便註冊、取消註冊及載入記憶體。
- DllMain:DLL 進入點。 DllMain名稱是程式庫定義函數名稱的預留位置。 DirectShow 實作會使用 DllEntryPoint名稱。 如需詳細資訊,請參閱平臺 SDK。
- DllGetClassObject:建立類別處理站實例。 如前幾節所述。
- DllCanUnloadNow:查詢是否可以安全地卸載 DLL。
- DllRegisterServer:建立 DLL 的登錄專案。
- DllUnregisterServer:移除 DLL 的登錄專案。
其中,前三個是由 DirectShow 實作。 如果您的處理站範本在 m_lpfnInit 成員變數中提供初始化函式,則會從 DLL 進入點函式內呼叫該函式。 如需系統何時呼叫 DLL 進入點函式的詳細資訊,請參閱 DllMain。
您必須實作 DllRegisterServer 和 DllUnregisterServer,但 DirectShow 提供名為 AMovieDllRegisterServer2 的函式,該函式會執行必要的工作。 您的元件可以直接包裝此函式,如下列範例所示:
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
不過,在 DllRegisterServer 和 DllUnregisterServer 內,您可以視需要自訂註冊程式。 如果您的 DLL 包含篩選準則,您可能需要執行一些額外的工作。 如需詳細資訊,請參閱 如何註冊 DirectShow 篩選。
在模組定義 (.def) 檔案中,匯出進入點函式以外的所有 DLL 函式。 以下是 .def 檔案範例:
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
您可以使用 Regsvr32.exe 公用程式註冊 DLL。
相關主題