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

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

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

COM-компоненты MATLAB Compiler SDK все самоуказывают. Компонент саморегистрации содержит весь необходимый код, чтобы добавить или удалить полное описание себя к или из системного реестра. mwregsvr утилита, распределенная с MATLAB Runtime, регистры, самоуказывающие DLLs. Например, чтобы указать компонент под названием 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 указывать вашу библиотеку.

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

Информация хранится в реестре как ключи с одним или несколькими связанными именованными значениями. Сами ключи имеют значения, в основном, двух типов: читаемые строки и ГУИДЫ. (ГУИД Является акронимом для Глобально уникального идентификатора, 128-битное целое число гарантировало всегда, что было уникально.)

Компилятор автоматически генерирует ГУИДЫ для COM-классов, интерфейсов и библиотек типов, которые заданы в компоненте во время сборки, и кодирует эти ключи в саморегистрационный код компонента.

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

Внимание

Не удаляйте файл DLL в src своего проекта папка между сборками. Выполнение так заставляет ГУИДЫ быть регенерированными на последующей сборке. Чтобы сохранить более старую версию DLL, укажите его в своей системе прежде, чем восстановить ваш проект.

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

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

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

HKEY_CLASSES_ROOT\Interface

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

HKEY_CLASSES_ROOT\TypeLib

Информация о библиотеках типов в системе. Каждый компонент создает ключ для своей библиотеки типов со значением ГУИДА, присвоенного ему. Под этим ключом новый ключ создается для каждой версии библиотеки типов. Поэтому новые версии библиотек типов с тем же именем снова используют исходный ГУИД, но создают новый подключ для новой версии.

HKEY_CLASSES_ROOT\<ProgID>, HKEY_CLASSES_ROOT\<VerIndProgID>

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

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

Эти ключи полезны для создания экземпляра класса от имен компонентов и имен классов вместо ГУИДОВ.

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

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

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

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

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

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

  • Если это находит существующий компонент с различной версией, это использует существующий ГУИД библиотеки типов и создает новый подключ для нового номера версии. Это генерирует новые ГУИДЫ для нового класса и интерфейса.

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