Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал MediaPlayer, IMFMediaEngine и захват аудио и видео в Media Foundation вместо DirectShow. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Последним шагом является реализация функции DllRegisterServer. Библиотека DLL, содержащая компонент, должна экспортировать эту функцию. Функция будет вызываться приложением настройки или когда пользователь запускает средство Regsvr32.exe.
В следующем примере показана минимальная реализация DlLRegisterServer:
STDAPI DllRegisterServer(void)
{
return AMovieDllRegisterServer2(TRUE);
}
Функция AMovieDllRegisterServer2 создаёт записи реестра для каждого компонента.
g_Templates
массив. Однако эта функция имеет некоторые ограничения. Во-первых, он назначает каждый фильтр категории "Фильтры DirectShow" (CLSID_LegacyAmFilterCategory), но не каждый фильтр принадлежит этой категории. Например, фильтры захвата и фильтры сжатия имеют собственные категории. Во-вторых, если фильтр поддерживает аппаратное устройство, может потребоваться зарегистрировать два дополнительных фрагмента информации, которые AMovieDLLRegisterServer2 не обрабатываются: среда и категория контакта . Среда определяет метод связи на аппаратном устройстве, например шину. Категория контакта определяет его функцию. Сведения о средних средах см. в разделе "KSPIN_MEDIUM" в пакете средств разработки драйверов Microsoft Windows (DDK). Список категорий пинов см. в разделе Набор свойств пина.
Если вы хотите указать категорию фильтра, среду или категорию пинов, вызовите метод IFilterMapper2::RegisterFilter из DllRegisterServer. Этот метод принимает указатель на структуру REGFILTER2, которая указывает сведения о фильтре.
Для некоторого усложнения ситуации, структура REGFILTER2 поддерживает два разных формата для регистрации пинов. Элемент dwVersion указывает формат:
- Если dwVersion равно 1, формат пина AMOVIESETUP_PIN (описан ранее).
- Если dwVersion равно 2, то формат пинов REGFILTERPINS2.
Структура REGFILTERPINS2 включает записи для сред разъемов и категорий разъемов. Кроме того, он использует битовые флаги для некоторых элементов, которые AMOVIESETUP_PIN объявляет как булевые значения.
В следующем примере показано, как вызвать IFilterMapper2::RegisterFilter из DllRegisterServer:
REGFILTER2 rf2FilterReg = {
1, // Version 1 (no pin mediums or pin category).
MERIT_NORMAL, // Merit.
1, // Number of pins.
&sudPins // Pointer to pin information.
};
STDAPI DllRegisterServer(void)
{
HRESULT hr;
IFilterMapper2 *pFM2 = NULL;
hr = AMovieDllRegisterServer2(TRUE);
if (FAILED(hr))
return hr;
hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
IID_IFilterMapper2, (void **)&pFM2);
if (FAILED(hr))
return hr;
hr = pFM2->RegisterFilter(
CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
NULL, // Device moniker.
&CLSID_VideoCompressorCategory, // Video compressor category.
g_wszName, // Instance data.
&rf2FilterReg // Pointer to filter information.
);
pFM2->Release();
return hr;
}