Создание фильтров DirectShow
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Для реализации фильтров DirectShow рекомендуется использовать базовые классы DirectShow. Чтобы выполнить сборку с использованием базовых классов, выполните следующие действия в дополнение к действиям, перечисленным в разделе Настройка среды сборки.
- Создайте библиотеку базовых классов, расположенную в каталоге Samples\Multimedia\DirectShow\BaseClasses, в корневом каталоге пакета SDK. Существует две версии библиотеки: розничная версия (Strmbase.lib) и отладочная версия (Strmbasd.lib).
- Включите файл заголовка Streams.h.
- Используйте соглашение о вызовах __stdcall.
- Используйте многопоточную библиотеку времени выполнения C (отладочную или розничную, при необходимости).
- Включите файл определения (DEF- файл), который экспортирует функции DLL. Ниже приведен пример файла определения. Предполагается, что выходной файл называется MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
- Ссылка на следующие lib-файлы.
Метка | Значение |
---|---|
Отладочная сборка | Strmbasd.lib, Msvcrtd.lib, Winmm.lib |
Розничная сборка | Strmbase.lib, Msvcrt.lib, Winmm.lib |
- Выберите параметр "Игнорировать библиотеки по умолчанию" в параметрах компоновщика.
- Объявите точку входа DLL в исходном коде следующим образом:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
Предыдущие версии
Для версий библиотеки базовых классов до DirectShow 9.0 необходимо также выполнить следующие действия:
- Для отладочных сборок определите флаг препроцессора DEBUG.
Этот шаг не требуется для версии библиотеки базовых классов, доступной в DirectShow 9.0 и более поздних версиях.