主要内容

组件注册

自动记录式组件

MATLAB®编译器SDK™Product创建一个组件时,它自动生成一个称为类型库.作为构建的最后一步,该文件与生成的DLL绑定为资源。

MATLAB编译器SDKCOM组件都是自动记录式.一个自注册组件包含向系统注册中心添加或从系统注册中心删除自身的完整描述所需的所有代码。的mwregsvr实用程序,随MATLAB运行时,注册自注册的dll。例如,注册一个名为mycomponent_1_0.dll,在DOS命令提示符下发出这个命令:

mwregsvr mycomponent_1_0.dll

mwregsvr完成注册过程后,将显示一条指示成功或失败的消息。类似地,命令

Mwregsvr /u mycomponent_1_1 .dll

注销组件。

安装到特定机器上的组件必须注册mwregsvr.如果将组件移动到同一机器上的不同文件夹中,则必须重复注册过程。当从特定机器删除组件时,首先执行un注册它以确保注册中心不会保留错误的信息。

提示

mwregsvr实用程序调用类似于的流程regsvr32.exe,除了mwregsvr不需要与控制台上的用户交互。的regsvr32.exe进程属于Windows®用于注册动态链接库和微软®ActiveX®控件。这个程序对你的电脑的稳定和安全运行很重要,不应该被终止。调用时必须指定组件的完整路径mwregsvr,或者从组件所在的文件夹进行调用。你可以使用regsvr32.exe作为替代方案mwregsvr登记你的图书馆。

全局唯一标识符

信息以键的形式存储在注册表中,键具有一个或多个关联的命名值。键本身的值主要有两种类型:可读字符串和guid。(GUID是全球唯一标识符的首字母缩写,一个128位整数,保证始终是唯一的。)

编译器在构建时自动为组件中定义的COM类、接口和类型库生成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 \接口

系统COM接口信息。每个组件在下面创建一个新键HKEY_CLASSES_ROOT \接口对于它定义的每个接口。该键包含分配给接口的GUID值,并包含关于接口的信息的子键。

HKEY_CLASSES_ROOT \ TypeLib

系统上有关类型库的信息。每个组件为其类型库创建一个键,并将GUID值赋给它。在这个键下,为类型库的每个版本创建一个新键。因此,具有相同名称的类型库的新版本重用原始GUID,但为新版本创建新的子键。

HKEY_CLASSES_ROOT \ < ProgID >, HKEY_CLASSES_ROOT \ < VerIndProgID >

这两个键是为组件的程序ID和版本独立程序ID创建的。这些键由下列形式的字符串构成:

component-name.class-name
component-name.class-name版本号

这些键对于根据组件和类名而不是guid创建类实例非常有用。

版本控制

MATLAB编译器SDK组件支持一种简单的版本金宝app控制机制,该机制旨在使构建和部署同一组件的多个版本易于实现。组件的版本号显示为DLL名称的一部分,以及系统注册表中版本相关ID的一部分。

创建组件时,可以指定版本号。(默认值是1.0。)在开发组件的特定版本时,版本号应该保持不变。当这完成时,MATLAB编译器SDKproduct,在某些情况下,为组件的每个后续构建重用类型库、类和接口guid。这避免了在多个构建期间为同一个组件创建过多的注册表项,如果为每个构建生成新的guid,就会发生这种情况。

当引入新的版本号时,MATLAB编译器SDK生成新的类和接口guid,以便系统识别它们与以前的版本不同,即使类名相同。因此,一旦部署了构建的组件,对组件所做的任何更改都要使用新的版本号。这可以确保在部署新组件之后,可以轻松地管理这两个版本。

MATLAB编译器SDK通过查询系统注册表中同名的现有组件,实现特定组件名称、类名和版本号的版本控制规则:

  • 如果现有组件具有相同的版本,则使用现有组件类型库的GUID。如果新类的名称与以前的版本匹配,它将重用类和接口guid。如果类名不匹配,则为新类和接口生成新的guid。

  • 如果它发现现有组件的版本不同,它将使用现有类型库GUID并为新版本号创建新的子键。它为新的类和接口生成新的guid。

  • 如果没有找到指定名称的现有组件,它将为组件的类型库、类和接口生成新的guid。