Поделиться через


Функции DLL

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

В этом разделе описывается реализация компонента в виде библиотеки динамической компоновки (DLL) в Microsoft DirectShow.

Библиотека DLL должна реализовывать следующие функции, чтобы ее можно было зарегистрировать, отменить регистрацию и загрузить в память.

  • DllMain: точка входа DLL. Имя DllMain — это заполнитель для имени функции, определяемой библиотекой. В реализации DirectShow используется имя DllEntryPoint. Дополнительные сведения см. в разделе Пакет SDK для платформы.
  • DllGetClassObject: создает экземпляр фабрики класса. Описано в предыдущих разделах.
  • DllCanUnloadNow: запрашивает возможность безопасной выгрузки библиотеки DLL.
  • DllRegisterServer: создает записи реестра для библиотеки DLL.
  • DllUnregisterServer: удаляет записи реестра для библиотеки DLL.

Из них первые три реализуются DirectShow. Если шаблон фабрики предоставляет функцию инициализации в переменной-члене m_lpfnInit , эта функция вызывается из функции точки входа DLL. Дополнительные сведения о том, когда система вызывает функцию точки входа DLL, см. в разделе DllMain.

Необходимо реализовать Библиотеки DllRegisterServer и DllUnregisterServer, но DirectShow предоставляет функцию С именем AMovieDllRegisterServer2 , которая выполняет необходимую работу. Компонент может просто упаковать эту функцию в оболочку, как показано в следующем примере:

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

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

Однако в библиотеках DllRegisterServer и DllUnregisterServer можно настроить процесс регистрации при необходимости. Если библиотека DLL содержит фильтр, может потребоваться выполнить дополнительные действия. Дополнительные сведения см. в разделе Регистрация фильтров DirectShow.

В файле определения модуля (DEF) экспортируйте все функции DLL, кроме функции точки входа. Ниже приведен пример ФАЙЛА DEF:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Вы можете зарегистрировать библиотеку DLL с помощью служебной программы Regsvr32.exe.

Создание библиотеки DLL фильтра DirectShow