Регистрация компонентов

Саморегистрирующиеся компоненты

Когда MATLAB® Compiler SDK™ продукт создает компонент, он автоматически генерирует двоичный файл, называемый type library. В качестве последнего шага сборки этот файл связан с полученной DLL в качестве ресурса.

Все COM- компонентов MATLAB Compiler SDK являются саморегистрирующимися. Саморегистрирующийся компонент содержит весь необходимый код, чтобы добавить или удалить полное описание себя в системный реестр или из него. The mwregsvr утилита, распространяемая с помощью MATLAB Runtime, регистрирует саморегистрирующиеся DLL. Например, чтобы зарегистрировать компонент с именем mycomponent_1_0.dll, выполните эту команду в командной строке DOS:

mwregsvr mycomponent_1_0.dll

Когда mwregsvr завершает процесс регистрации, отображает сообщение об успехе или отказе. Точно так же команда

mwregsvr /u mycomponent_1_0.dll

отменяет регистрацию компонента.

Компонент, установленный на конкретном компьютере, должен быть зарегистрирован в mwregsvr. Если вы перемещаете компонент в другую папку на том же компьютере, необходимо повторить процесс регистрации. При удалении компонента с определенного компьютера сначала отмените его регистрацию, чтобы убедиться, что реестр не сохраняет ошибочную информацию.

Совет

The mwregsvr утилита вызывает процесс, который похож на regsvr32.exe, кроме того mwregsvr не требует взаимодействия с пользователем на консоли. The regsvr32.exe процесс принадлежит Windows® ОС и используется для регистрации динамических библиотек ссылок и Microsoft® ActiveX® элементы управления в реестре. Эта программа важна для стабильного и безопасного функционирования вашего компьютера и не должна быть прекращена. При вызове необходимо задать полный путь к компоненту mwregsvr, или выполните вызов из папки, в которой находится компонент. Можно использовать regsvr32.exe как альтернатива mwregsvr чтобы зарегистрировать вашу библиотеку.

Глобально уникальный идентификатор

Сведения хранятся в реестре как ключи с одним или несколькими связанными именованными значениями. Сами ключи имеют значения в первую очередь двух типов: читаемые строки и GUID. (GUID - это аббревиатура для Globally Unique Identifier, 128-битное целое число, которое гарантированно всегда будет уникальным.)

Компилятор автоматически генерирует GUID для классов, интерфейсов и библиотек типов, которые определены в компоненте во время сборки, и кодирует эти ключи в код саморегистрации компонента.

Интерфейс к системному реестру основан на папках. Информация, относящаяся к COM, хранится под ключом верхнего уровня, называемым HKEY_CLASSES_ROOT. Под HKEY_CLASSES_ROOT являются несколькими другими ключами, под которыми компилятор записывает информацию о компоненте.

Внимание

Не удаляйте DLL-файл в src вашего проекта папка между сборками. Это приводит к регенерации GUID на последующей сборке. Чтобы сохранить более старую версию DLL, зарегистрируйте ее в своей системе перед перестройкой проекта.

Список ключей и их определений см. в следующей таблице.

КлючОпределение
HKEY_CLASSES_ROOT\CLSID

Сведения о классах COM в системе. Каждый компонент создает новый ключ под HKEY_CLASSES_ROOT\CLSID для каждого из его COM- классов. Созданный ключ имеет значение GUID, которому был присвоен класс, и содержит несколько подразделов с информацией о классе.

HKEY_CLASSES_ROOT\Interface

Информация об интерфейсах COM в системе. Каждый компонент создает новый ключ под HKEY_CLASSES_ROOT\Interface для каждого заданного интерфейса. Эта клавиша имеет значение GUID, назначенного интерфейсу, и содержит подразделы с информацией об интерфейсе.

HKEY_CLASSES_ROOT\TypeLib

Сведения о библиотеках типов в системе. Каждый компонент создает ключ для библиотеки типов со значением присвоенного ему GUID. Под этим ключом создается новый ключ для каждой версии библиотеки типов. Поэтому новые версии библиотек типов с таким же именем повторно используют исходный GUID, но создают новый подсек для новой версии.

HKEY_CLASSES_ROOT\<ProgID>, HKEY_CLASSES_ROOT\<VerIndProgID>

Эти два ключа создаются для идентификаторов программы компонента и независимой от версии программы. Эти ключи создаются из строк следующих форм:

component-name.class-name
component-name.class-name version-number

Эти ключи применяются для создания образца класса из имен компонентов и классов вместо GUID.

Управление версиями

Компоненты MATLAB Compiler SDK поддерживают простой механизм управления версиями, предназначенный для упрощения создания и развертывания нескольких версий одного и того же компонента. Номер версии компонента появляется как часть имени DLL, а также как часть зависящего от версии идентификатора в системном реестре.

При создании компонента можно задать номер версии. (Значение по умолчанию является 1.0.) Во время разработки определенной версии компонента номер версии должен оставаться постоянным. Когда это делается, продукт MATLAB Compiler SDK в некоторых случаях повторно использует GUID библиотеки типов, класса и интерфейса для каждой последующей сборки компонента. Это позволяет избежать создания избыточного количества разделов реестра для одного и того же компонента во время нескольких построений, как это происходит, если для каждой сборки генерируются новые GUID.

Когда вводится новый номер версии, MATLAB Compiler SDK генерирует новые GUID классов и интерфейсов, так что система распознает их как отличные от предыдущих версий, даже если имя класса совпадает. Поэтому после развертывания встроенного компонента используйте новый номер версии для любых изменений, внесенных в компонент. Это гарантирует, что после развертывания нового компонента управлять двумя версиями будет легко.

MATLAB Compiler SDK реализует правила управления версиями для определенного имени компонента, имени класса и номера версии путем запроса системного реестра для существующего компонента с таким же именем:

  • Если существующий компонент имеет ту же версию, он использует GUID существующей библиотеки типов компонентов. Если имя нового класса совпадает с предыдущей версией, он повторно использует GUID классов и интерфейсов. Если имена классов не совпадают, они генерируют новые GUID для нового класса и интерфейса.

  • Если он находит существующий компонент с другой версией, он использует существующий идентификатор GUID библиотеки типов и создает новый ключ для номера новой версии. Он генерирует новые GUID для нового класса и интерфейса.

  • Если он не находит существующий компонент с заданным именем, он генерирует новые GUID для библиотеки типов компонентов, класса и интерфейса.

Для просмотра документации необходимо авторизоваться на сайте