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


Функции 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