regsvr32 filename.ax
Я просто вижу, что он сказал, что что-то установлено успешно, но что это за история?
regsvr32 filename.ax
Я просто вижу, что он сказал, что что-то установлено успешно, но что это за история?
Он в основном вызывает вашу dll (именованный filename.ax в этом случае) и вызывает его метод "DllRegisterServer".
В случае фильтров directshow он может "зарегистрировать" эти фильтры в реестре Windows, чтобы directshow знал о них.
ex: https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L698 вызывает https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L631
Хотя там есть более простые версии.
COM, который широко используется в Windows, зависит от регистрации. Компонент будет предоставлять библиотеки типов, интерфейсы и классы. Каждый из них определяется идентификатором GUID, чтобы однозначно назвать их. Компоненты COM также могут определять ProgID, которые являются ярлыками для неудобных GUID.
Вся эта информация хранится в специальном кустах реестра на компьютере с именем HKEY_CLASSES_ROOT
. Используйте RegEdit.exe
для просмотра. В частности, вы можете найти библиотеки типов в HKEY_CLASSES_ROOT\TypeLib
, интерфейсы в HKEY_CLASSES_ROOT\Interface
и классы в HKEY_CLASSES_ROOT\CLSID
. Некоторая информация в реестре будет содержать путь к фактической DLL с компонентом, позволяющим Windows находить и загружать компонент, когда он запрашивается.
При установке COM-компонента необходимо создать правильную информацию реестра. По соглашению DLL может предоставить две экспортируемые функции:
При выполнении RegSvr32.exe MyComponent.dll
исполняемый файл RegSvr32.exe
попытается вызвать DllRegisterServer
в MyComponent.dll
. Затем DLL должна создать все необходимые записи в реестре, чтобы позволить использовать этот компонент.
Аналогичным образом вы можете использовать RegSvr32.exe /u MyComponent.dll
, чтобы отменить регистрацию компонента. Это приведет к удалению всей информации, ранее добавленной в реестр.
Windows сильно зависит от COM, и очень важно, чтобы записи COM обновлялись. К сожалению, нет ничего, что блокирует вас от удаления уже зарегистрированного COM-компонента. Это приведет к тому, что в реестре будут висящие указатели, указывающие на уже отсутствующую DLL. Вы даже не можете отменить регистрацию, поскольку она больше не существует.
Другая проблема заключается в том, что для двух разных приложений требуются разные версии одного и того же компонента. Реестр может указывать только на одну из двух версий, и это может привести к сбою одного из приложений.
Microsoft создала исправления для этих проблем. Гораздо лучше предоставить установщик для COM-компонента, который может восстановить и удалить компонент, если он был удален. Вы также можете создавать бок о бок установку одного и того же компонента в разных версиях.
regsvr32 регистрирует DLL и EXE в реестре Windows (обычно это библиотеки COM-типа, идентификаторы классов, идентификаторы интерфейсов и т.д.). Вы можете использовать regedit для навигации по реестру.