Main Content

只包含头文件的 HPP 文件

此示例创建名为 school 的 C++ 库的 MATLAB® 接口。该库在头文件中定义,没有编译库文件。完全由其头文件定义的库称为只包含头文件的库。

库工件MATLAB 接口 libnameMATLAB 帮助

头文件 school.hpp

clib.school(默认名称)

>> doc clib.school

此库定义表示学生和教师的类。发布此库后,MATLAB 用户可以调用 clib.school 命名空间中的函数来创建 StudentTeacher 对象,并指定姓名和年龄。

MATLAB 在以下文件夹提供了此示例中使用的头文件:

fullfile(matlabroot,"extern","examples","cpp_interface");

要为此库创建一个名为 school 的接口,请在工作流脚本中执行以下步骤:生成库定义文件,定义任何缺失的构造,编译接口,然后测试接口。如果您需要迭代发布过程,可以采取额外的步骤来还原参数并启用进程外执行模式。然后,您可以与其他用户共享您发布的接口。

创建工作流脚本

导航到一个可写文件夹并调用 clibPublishInterfaceWorkflow。在对话框中,指定工作流脚本的名称,例如 publishmatrixlib.mlx。该工作流脚本包含帮助您发布接口的步骤。使用该脚本保存用于发布接口的参数。您可以在所有平台上使用相同的脚本。

注意

工作流脚本允许您在多个 MATLAB 会话期间重复生成、定义、编译和测试接口。但是,该脚本不会保存对使用覆盖现有定义文件选项重新创建的库定义文件的编辑。

Step 1: GENERATE

首先,生成库定义文件。工作流脚本包含用于此步骤的生成 C++ 接口实时编辑器任务。使用此任务可以选择组成库的文件,并设置用于生成库定义文件的选项。

选择文件

库由 school.hpp 头文件定义。将库类型设置为 Header-only

要设置库起始路径,请浏览至文件夹 fullfile(matlabroot,"extern","examples","cpp_interface"),然后点击选择文件夹

要选择头文件,请点击浏览以打开文件 school.hpp

该头文件不依赖其他头文件,因此请选中库不需要包含路径复选框。

选择配置

在此示例中,C++ 编译器设置为 MinGW64 Compiler (C++)

默认情况下,接口库的名称school。此名称与 clib 结合使用以调用 MATLAB 中的功能。

确认输出文件夹是可写文件夹。

选中覆盖现有定义文件复选框,以便您可以在开发接口时重新创建定义文件。

指定可选的 C++ 库设置

编译此库的接口不需要可选的 C++ 库设置。

指定可选的定义配置

编译此库的接口不需要可选的定义配置。

显示结果

默认情况下,当您生成定义文件时,函数会显示可用的构造(库中的类和函数)。在开发接口时,还要选中显示不可用的构造复选框,以便您可以查看哪些构造可能需要更多信息才能包括在内。

生成定义文件

点击生成定义文件。脚本会显示其进度,并在指定的输出文件夹中创建库定义文件 defineschool.m

Step 2: DEFINE

创建库定义文件时,MATLAB 报告有一个构造未完全定义。要完全定义所需功能,请编辑 defineschool.m 文件。要编辑该文件,请运行 DEFINE 节。

具有缺失信息的构造被注释掉。滚动浏览文件,找到标题为 "C++ function getName with MATLAB name clib.school.getName" 的节。取消对 getName 代码节中语句的注释。

输入参量 p 是标量值。将以下语句中的 <SHAPE> 替换为数字 1

defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);

保存并关闭定义文件。

要验证您在文件中所做的编辑,请运行 Confirm edits and run summary 节。在文件中修复报告的任何错误。

summary 函数显示:

MATLAB Interface to school Library

Class clib.school.Person

  Constructors:
    clib.school.Person()
    clib.school.Person(string,uint64)
    clib.school.Person(clib.school.Person)

  Methods:
    setName(string)
    setAge(uint64)
    string getName()
    uint64 getAge()

  No Properties defined

Class clib.school.Teacher

  Constructors:
    clib.school.Teacher()
    clib.school.Teacher(string,uint64)
    clib.school.Teacher(clib.school.Teacher)

  Methods:
    string getName()

  No Properties defined

Class clib.school.Student

  Constructors:
    clib.school.Student()
    clib.school.Student(string,uint64)
    clib.school.Student(clib.school.Student)

  Methods:
    string getName()

  No Properties defined

Functions
  string clib.school.getName(clib.school.Person)

Step 3: BUILD

要编译库的 school 接口,请运行脚本的 BUILD 节。

Building interface file 'schoolInterface.dll' for clib interface 'school'.
Interface file 'schoolInterface.dll' built in folder 'C:\Users\Documents\MATLAB\school'.

To use the library, add the interface file folder to the MATLAB path.
addpath('C:\Users\Documents\MATLAB\school')

注意

您可以重复生成、定义和编译步骤。但是,一旦显示帮助或调用库中的函数,就无法在同一 MATLAB 会话中更新 defineschool 定义文件。请重新启动 MATLAB,或通过更改选择配置部分中的接口库的名称参数来创建新定义文件。

Step 4: TEST

Set up and copy run-time libraries

运行 Set up and copy run-time libraries 节。此库没有其他运行时依存关系,因此您不需要修改命令。

Call help on interface library

要显示接口库的帮助,请运行 Call help on interface library 节。

Write code to call and test interface library

使用 Write code to call and test interface library 中的代码节来编写这些测试:

t1 = clib.school.Teacher('Ms. Jones',24);
getName(t1)
ans = "Ms. Jones"

共享接口

要与其他 MATLAB 用户共享该接口,请创建一个工具箱安装 (.mltbx) 文件。使用Distribute MATLAB Interface to C++ Library中的说明:

  • 将工具箱文件夹设置为您的 school 文件夹,其中包含接口文件 schoolInterface.dll

  • 将命名空间(调用语法)标识为 clib.school

相关主题