Freigeben über


DLL-Funktionen

[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.]

In diesem Thema wird beschrieben, wie Sie eine Komponente als DLL (Dynamic Link Library) in Microsoft DirectShow implementieren.

Eine DLL muss die folgenden Funktionen implementieren, damit sie registriert, aufgehoben und in den Arbeitsspeicher geladen werden kann.

  • DllMain: Der DLL-Einstiegspunkt. Der Name DllMain ist ein Platzhalter für den von der Bibliothek definierten Funktionsnamen. Die DirectShow-Implementierung verwendet den Namen DllEntryPoint. Weitere Informationen finden Sie im Platform SDK.
  • DllGetClassObject: Erstellt eine Klassenfactory-instance. In den vorherigen Abschnitten beschrieben.
  • DllCanUnloadNow: Fragt ab, ob die DLL sicher entladen werden kann.
  • DllRegisterServer: Erstellt Registrierungseinträge für die DLL.
  • DllUnregisterServer: Entfernt Registrierungseinträge für die DLL.

Davon werden die ersten drei von DirectShow implementiert. Wenn Ihre Factoryvorlage eine Initialisierungsfunktion in der m_lpfnInit Membervariablen bereitstellt, wird diese Funktion innerhalb der DLL-Einstiegspunktfunktion aufgerufen. Weitere Informationen dazu, wann das System die DLL-Einstiegspunktfunktion aufruft, finden Sie unter DllMain.

Sie müssen DllRegisterServer und DllUnregisterServer implementieren, aber DirectShow stellt eine Funktion mit dem Namen AMovieDllRegisterServer2 bereit, die die erforderlichen Aufgaben übernimmt. Ihre Komponente kann diese Funktion einfach umschließen, wie im folgenden Beispiel gezeigt:

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

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

In DllRegisterServer und DllUnregisterServer können Sie den Registrierungsprozess jedoch nach Bedarf anpassen. Wenn Ihre DLL einen Filter enthält, müssen Sie möglicherweise zusätzliche Arbeit leisten. Weitere Informationen finden Sie unter Registrieren von DirectShow-Filtern.

Exportieren Sie in Ihrer Moduldefinitionsdatei (.def) alle DLL-Funktionen mit Ausnahme der Einstiegspunktfunktion. Im Folgenden wird eine .def-Beispieldatei angezeigt:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Sie können die DLL mit dem Hilfsprogramm Regsvr32.exe registrieren.

Erstellen einer DirectShow-Filter-DLL