Funkcje DLL
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
W tym temacie opisano sposób implementowania składnika jako biblioteki DLL (dynamic-link) w programie Microsoft DirectShow.
Biblioteka DLL musi zaimplementować następujące funkcje, aby można je było zarejestrować, wyrejestrować i załadować do pamięci.
- DllMain: punkt wejścia biblioteki DLL. Nazwa DllMain jest symbolem zastępczym nazwy funkcji zdefiniowanej przez bibliotekę. Implementacja DirectShow używa nazwy DllEntryPoint. Aby uzyskać więcej informacji, zobacz zestaw SDK platformy.
- DllGetClassObject: tworzy wystąpienie fabryki klas. Opisane w poprzednich sekcjach.
- DllCanUnloadNow: wysyła zapytania o to, czy biblioteka DLL może zostać bezpiecznie zwolniona.
- DllRegisterServer: tworzy wpisy rejestru dla biblioteki DLL.
- DllUnregisterServer: usuwa wpisy rejestru dla biblioteki DLL.
Z nich pierwsze trzy są implementowane przez DirectShow. Jeśli szablon fabryki udostępnia funkcję inicjowania w zmiennej składowej m_lpfnInit, ta funkcja jest wywoływana z wewnątrz funkcji punktu wejścia biblioteki DLL. Aby uzyskać więcej informacji o tym, kiedy system wywołuje funkcję punktu wejścia biblioteki DLL, zobacz DllMain.
Należy zaimplementować DllRegisterServer i DllUnregisterServer, ale directShow udostępnia funkcję o nazwie AServerDllRegisterServer2, która wykonuje niezbędną pracę. Składnik może po prostu opakowować tę funkcję, jak pokazano w poniższym przykładzie:
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
Jednak w dllRegisterServer i DllUnregisterServer można dostosować proces rejestracji zgodnie z potrzebami. Jeśli biblioteka DLL zawiera filtr, może być konieczne wykonanie dodatkowej pracy. Aby uzyskać więcej informacji, zobacz Jak zarejestrować filtry DirectShow.
W pliku definicji modułu (.def) wyeksportuj wszystkie funkcje DLL z wyjątkiem funkcji punktu wejścia. Poniżej przedstawiono przykładowy plik def:
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
Bibliotekę DLL można zarejestrować przy użyciu narzędzia Regsvr32.exe.
Tematy pokrewne