Когда продукт MATLAB ® Compiler SDK™ создает компонент, он автоматически создает двоичный файл, называемый библиотекой типов. В качестве последнего шага построения этот файл привязан к результирующей DLL в качестве ресурса.
Компоненты COM компилятора MATLAB SDK регистрируются самостоятельно. Компонент саморегистрации содержит весь необходимый код для добавления или удаления полного описания себя в системный реестр или из него. mwregsvr утилита, распространяемая с помощью среды выполнения MATLAB, регистрирует самостоятельно регистрируемые DLL. Например, для регистрации компонента с именем mycomponent_1_0.dllвведите следующую команду в командной строке DOS:
mwregsvr mycomponent_1_0.dll
Когда mwregsvr завершает процесс регистрации и выводит сообщение об успешном или неуспешном завершении. Аналогично, команда
mwregsvr /u mycomponent_1_0.dll
отменяет регистрацию компонента.
Компонент, установленный на конкретном компьютере, должен быть зарегистрирован в mwregsvr. При перемещении компонента в другую папку на том же компьютере необходимо повторить процесс регистрации. При удалении компонента с определенного компьютера сначала отмените его регистрацию, чтобы в реестре не сохранялась ошибочная информация.
Совет
mwregsvr утилита вызывает процесс, аналогичный regsvr32.exe, за исключением того, что mwregsvr не требует взаимодействия с пользователем на консоли. regsvr32.exe относится к ОС Windows ® и используется для регистрации в реестре динамических библиотек ссылок и элементов управления Microsoft ® ActiveX ®. Эта программа важна для стабильной и безопасной работы компьютера и не должна быть прервана. При вызове необходимо указать полный путь к компонентуmwregsvrили выполнить вызов из папки, в которой находится компонент. Вы можете использовать regsvr32.exe в качестве альтернативы mwregsvr для регистрации библиотеки.
Информация хранится в реестре как разделы с одним или несколькими связанными именованными значениями. Сами клавиши имеют значения в основном двух типов: считываемые строки и GUID. (GUID - аббревиатура глобального уникального идентификатора, 128-битное целое число, гарантированно всегда уникальное.)
Компилятор автоматически генерирует GUID для COM-классов, интерфейсов и библиотек типов, определенных в компоненте во время сборки, и кодирует эти ключи в код саморегистрации компонента.
Интерфейс системного реестра основан на папке. Информация, связанная с COM, хранится под ключом верхнего уровня, называемым HKEY_CLASSES_ROOT. Под HKEY_CLASSES_ROOT - это несколько других ключей, под которыми компилятор записывает информацию о компонентах.
Внимание
Не удалять файл DLL в проекте src между сборками. Это приводит к регенерации GUID в последующей сборке. Чтобы сохранить старую версию DLL, зарегистрируйте ее в системе перед перестроением проекта.
Список ключей и их определений см. в следующей таблице.
| Ключ | Определение |
|---|---|
HKEY_CLASSES_ROOT\CLSID | Информация о классах COM в системе. Каждый компонент создает новый ключ под |
HKEY_CLASSES_ROOT\Interface | Информация об интерфейсах COM в системе. Каждый компонент создает новый ключ под |
HKEY_CLASSES_ROOT\TypeLib | Информация о библиотеках типов в системе. Каждый компонент создает ключ для своей библиотеки типов со значением присвоенного ему GUID. Под этим ключом создается новый ключ для каждой версии библиотеки типов. Поэтому новые версии библиотек типов с тем же именем повторно используют исходный GUID, но создают новый подраздел для новой версии. |
HKEY_CLASSES_ROOT\<ProgID>, HKEY_CLASSES_ROOT\<VerIndProgID> | Эти два ключа создаются для идентификатора программы компонента и независимого от версии идентификатора программы. Эти ключи построены из строк следующих форм: |
Компоненты MATLAB Compiler SDK поддерживают простой механизм управления версиями, позволяющий легко реализовать создание и развертывание нескольких версий одного и того же компонента. Номер версии компонента отображается как часть имени DLL, а также как часть идентификатора, зависящего от версии, в системном реестре.
При создании компонента можно указать номер версии. (Значение по умолчанию - 1,0.) При разработке определенной версии компонента номер версии должен оставаться постоянным. При этом продукт MATLAB Compiler SDK в некоторых случаях повторно использует GUID библиотеки типов, класса и интерфейса для каждой последующей сборки компонента. Это позволяет избежать создания избыточного количества разделов реестра для одного и того же компонента во время нескольких сборок, как это происходит, если для каждой сборки создаются новые GUID.
Когда вводится новый номер версии, MATLAB Compiler SDK генерирует новые GUID классов и интерфейсов, чтобы система распознавала их как отличные от предыдущих версий, даже если имя класса совпадает. Поэтому после развертывания встроенного компонента используйте новый номер версии для любых изменений, внесенных в компонент. Это гарантирует простоту управления двумя версиями после развертывания нового компонента.
MATLAB Compiler SDK реализует правила управления версиями для определенного имени компонента, имени класса и номера версии путем запроса системного реестра для существующего компонента с таким же именем:
Если существующий компонент имеет ту же версию, он использует GUID библиотеки типов существующего компонента. Если имя нового класса соответствует предыдущей версии, он повторно использует GUID класса и интерфейса. Если имена классов не совпадают, создается новый GUID для нового класса и интерфейса.
Если он находит существующий компонент с другой версией, он использует существующий GUID библиотеки типов и создает новый подраздел для нового номера версии. Он генерирует новые GUID для нового класса и интерфейса.
Если он не находит существующий компонент с указанным именем, он создает новые GUID для библиотеки типов, класса и интерфейса компонента.