Main Content

使用 C 矩阵 API 创建 C++ MEX 函数

注意

MATLAB® 提供使用现代 C++ 语义和设计模式的 API,即 MATLAB Data API for C++。MathWorks 建议您使用此 API 创建 MEX 函数。有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数

如果您的 MEX 函数必须在 MATLAB R2017b 或更早版本中运行,则您必须在 C++ 应用程序中使用 C Matrix API 函数。用 C 矩阵 API 编译的 MEX 函数支持所有 C++ 语言标准。本主题讨论创建和使用 MEX 文件时要考虑的特定 C++ 语言事项。

您可以在 C++ 应用程序中使用 MATLAB C 代码示例。有关示例,请参阅 C++ 类示例中的 mexcpp.cpp,其中包含 C 和 C++ 语句。

创建 C++ 源文件

MATLAB C++ 源代码示例使用 .cpp 文件扩展名。扩展名 .cpp 是 C++ 编译器可识别的明确扩展名。其他可能的扩展名包括 .C.cc.cxx

编译和链接

要编译 C++ MEX 文件,请键入:

mex filename.cpp

其中,filename 为您的 MATLAB 路径上源代码文件的名称。

运行 C++ MEX 文件的系统上的 MATLAB 版本必须与编译该文件所用的 MATLAB 版本相同。

类析构函数的内存注意事项

不要在 MEX 函数中所用类的 C++ 析构函数中使用 mxFreemxDestroyArray 函数。如果 MEX 函数引发错误,则 MATLAB 将清理 MEX 文件变量(如Automatic Cleanup of Temporary Arrays in MEX Files中所述)。

如果发生的错误导致对象超出范围,MATLAB 将调用 C++ 析构函数。直接在析构函数中释放内存意味着 MATLAB 和析构函数均释放相同的内存,而这可能损坏内存。

使用 mexPrintf 打印到 MATLAB 命令行窗口

在 C++ MEX 文件中,使用 cout 或 C 语言 printf 函数无法按预期工作。改用 mexPrintf 函数。

C++ 类示例

MEX 文件 mexcpp.cpp 说明如何通过 C 语言 MEX 文件来使用 C++ 代码。该示例使用 C 矩阵 API 中的函数。它使用成员函数、构造函数、析构函数和 iostream include 文件。

该函数定义一个具有成员函数 displayset_data 以及变量 v1v2 的类 myData。它构造 myData 类的一个对象 d,并显示 v1v2 的初始化值。然后,它将 v1v2 设置为您的输入并显示新值。最后,使用 delete 操作符清理该对象。

要编译此示例,请将文件复制到 MATLAB 路径,并在命令提示符下键入:

mex mexcpp.cpp

调用语法是 mexcpp(num1, num2)

C++ 文件处理示例

mexatexit.cpp 示例说明了 C++ 文件处理功能。将其与使用 mexAtExit 函数的 C 代码示例 mexatexit.c 进行比较。

C++ 示例

C++ 示例使用 fileresource 类来处理文件打开和关闭函数。MEX 函数调用此类的析构函数,它关闭数据文件。在此示例中,在对数据文件执行操作时还会在屏幕上显示一条消息。但是,在本例中,执行的唯一 C 文件操作是写入操作,即 fprintf

要编译 mexatexit.cpp MEX 文件,请将文件复制到 MATLAB 路径并键入:

mex mexatexit.cpp

键入:

z = 'for the C++ MEX-file';
mexatexit(x)
mexatexit(z)
clear mexatexit
Writing data to file.
Writing data to file.

显示 matlab.data 的内容。

type matlab.data
my input string
for the C++ MEX-file

C 示例

此 C 代码示例注册 mexAtExit 函数,用于在清除 MEX 文件时执行清理任务(关闭数据文件)。此示例在执行文件操作 fopenfprintffclose 时使用 mexPrintf 在屏幕上显示一条消息。

要编译 mexatexit.c MEX 文件,请将文件复制到 MATLAB 路径并键入:

mex mexatexit.c

运行示例。

x = 'my input string';
mexatexit(x)
Opening file matlab.data.
Writing data to file.

清除 MEX 文件。

clear mexatexit
Closing file matlab.data.

显示 matlab.data 的内容。

type matlab.data
my input string

另请参阅

|

相关示例

详细信息