Erstellen von DirectShow-Filtern

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die DirectShow-Basisklassen werden für die Implementierung von DirectShow-Filtern empfohlen. Führen Sie zum Erstellen mit den Basisklassen zusätzlich zu den unter Einrichten der Buildumgebung aufgeführten Schritten die folgenden Schritte aus:

  • Erstellen Sie die Basisklassenbibliothek im Verzeichnis Samples\Multimedia\DirectShow\BaseClasses unter dem SDK-Stammverzeichnis. Es gibt zwei Versionen der Bibliothek: eine Einzelhandelsversion (Strmbase.lib) und eine Debugversion (Strmbasd.lib).
  • Schließen Sie die Headerdatei Streams.h ein.
  • Verwenden Sie die __stdcall Aufrufkonvention.
  • Verwenden Sie die Multithread-C-Laufzeitbibliothek (Debuggen oder Einzelhandel, je nach Bedarf).
  • Schließen Sie eine Definitionsdatei (.def) ein, die die DLL-Funktionen exportiert. Es folgt ein Beispiel für eine Definitionsdatei. Es wird davon ausgegangen, dass die Ausgabedatei den Namen MyFilter.dll hat.
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • Link zu den folgenden lib-Dateien.
Bezeichnung Wert
Debuggen von Build Strmbasd.lib, Msvcrtd.lib, Winmm.lib
Retail Build Strmbase.lib, Msvcrt.lib, Winmm.lib
  • Wählen Sie in den Linkereinstellungen die Option "Standardbibliotheken ignorieren" aus.
  • Deklarieren Sie den DLL-Einstiegspunkt im Quellcode wie folgt:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

Frühere Versionen

Für Versionen der Basisklassenbibliothek vor DirectShow 9.0 müssen Sie auch die folgenden Schritte ausführen:

  • Definieren Sie für Debugbuilds das Präprozessorflag DEBUG.

Dieser Schritt ist für die Version der Basisklassenbibliothek nicht erforderlich, die in DirectShow 9.0 und höher verfügbar ist.

DirectShow-Basisklassen

Schreiben von DirectShow-Filtern