共用方式為


DLL 函式

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 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

您必須實作 DllRegisterServerDllUnregisterServer,但 DirectShow 提供名為 AMovieDllRegisterServer2 的函式,該函式會執行必要的工作。 您的元件可以直接包裝此函式,如下列範例所示:

STDAPI DllRegisterServer()
{
    return AMovieDllRegisterServer2( TRUE );
}

STDAPI DllUnregisterServer()
{
    return AMovieDllRegisterServer2( FALSE );
}

不過,在 DllRegisterServerDllUnregisterServer 內,您可以視需要自訂註冊程式。 如果您的 DLL 包含篩選準則,您可能需要執行一些額外的工作。 如需詳細資訊,請參閱 如何註冊 DirectShow 篩選

在模組定義 (.def) 檔案中,匯出進入點函式以外的所有 DLL 函式。 以下是 .def 檔案範例:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

您可以使用 Regsvr32.exe 公用程式註冊 DLL。

如何建立 DirectShow 篩選 DLL