Функции 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.
Связанные разделы