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

目录

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

创建 C++ 源文件

编译和链接

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


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

        注意:MATLAB® 提供使用现代 C++ 语义和设计模式的 API,即 MATLAB 数据 API。MathWorks 建议使用此 API 创建 MEX 函数。具体可以参考C++ MEX 应用程序。

​        ​如果MEX 函数必须在 MATLAB R2017b 或更早版本中运行,则必须在 C++ 应用程序中使用 C 矩阵 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++ 析构函数中使用 mxFree 或 mxDestroyArray 函数。如果 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 文件。

        该函数定义一个具有成员函数 display 和 set_data 以及变量 v1 和 v2 的类 myData。它构造 myData 类的一个对象 d,并显示 v1 和 v2 的初始化值。然后,它将 v1 和 v2 设置为输入并显示新值。最后,使用 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 文件时执行清理任务(关闭数据文件)。此示例在执行文件操作 fopen、fprintf 和 fclose 时使用 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值