Dela via


DLL-funktioner

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

I det här avsnittet beskrivs hur du implementerar en komponent som ett DLL -bibliotek (Dynamic Link Library) i Microsoft DirectShow.

En DLL måste implementera följande funktioner så att den kan registreras, avregistreras och läsas in i minnet.

  • DllMain: DLL-startpunkten. Namnet DllMain är en platshållare för det biblioteksdefinierade funktionsnamnet. DirectShow-implementeringen använder namnet DllEntryPoint. Mer information finns i Platform SDK.
  • DllGetClassObject: Skapar en klassfabriksinstans. Beskrivs i föregående avsnitt.
  • DllCanUnloadNow: Frågar om DLL:en kan tas bort på ett säkert sätt.
  • DllRegisterServer: Skapar registerposter för DLL:en.
  • DllUnregisterServer: Tar bort registerposter för DLL.

Av dessa implementeras de tre första av DirectShow. Om din fabriksmall tillhandahåller en initieringsfunktion i m_lpfnInit medlemsvariabeln anropas den funktionen inifrån DLL-startpunktsfunktionen. Mer information om när systemet anropar funktionen DLL-startpunkt finns i DllMain.

Du måste implementera DllRegisterServer och DllUnregisterServer, men DirectShow tillhandahåller en funktion med namnet AMovieDllRegisterServer2 som utför det nödvändiga arbetet. Komponenten kan helt enkelt omsluta den här funktionen, som du ser i följande exempel:

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

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

Men inom DllRegisterServer och DllUnregisterServer kan du anpassa registreringsprocessen efter behov. Om DLL-filen innehåller ett filter kan du behöva utföra ytterligare arbete. Mer information finns i Registrera DirectShow-filter.

I moduldefinitionsfilen (.def) exporterar du alla DLL-funktioner förutom startpunktsfunktionen. Följande är ett exempel på en .def-fil:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Du kan registrera DLL:en med hjälp av verktyget Regsvr32.exe.

Skapa en DLL- för DirectShow-filter