主要内容

组件注册

自动记录式组件

MATLAB®编译器SDK™Product创建一个组件,它自动生成一个二进制文件,叫做类型库.作为构建的最后一步,此文件将作为资源与生成的DLL绑定。

MATLAB编译器SDKCOM组件自动记录式.一个自注册组件包含所有必要的代码,用于向系统注册表中或从系统注册表中添加或删除自身的完整描述。的mwregsvr效用,分布与MATLAB运行时,注册自注册的dll。例如,注册一个被调用的组件mycomponent_1_0.dll,在DOS命令提示符下发出此命令:

mwregsvr mycomponent_1_0.dll

mwregsvr完成注册过程后,它会显示一条表示成功或失败的消息。同样,命令

mwregsvr / u mycomponent_1_0.dll

注销该组件。

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

提示

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

全局唯一标识符

信息以键的形式存储在注册表中,具有一个或多个相关联的已命名值。键本身的值主要有两种类型:可读字符串和guid。(GUID是global Unique Identifier的首字母缩写,它是一个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组件支持一种简单的版本万博1manbetx控制机制,该机制旨在轻松地构建和部署同一个组件的多个版本。组件的版本号显示为DLL名称的一部分,以及系统注册表中与版本相关的ID的一部分。

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

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

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

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

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

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