主要内容

用C Matrix API创建c++ MEX函数

请注意

MATLAB®提供了一个使用现代c++语义和设计模式的APIMATLAB数据API.MathWorks建议使用此API创建MEX函数。有关更多信息,请参见c++墨西哥人的应用程序

如果MEX函数必须在MATLAB R2017b或更早版本中运行,则必须使用矩阵C API函数。用C Matrix API构建的MEX函数支持所有c++语言标准。万博1manbetx本主题讨论在创建和使用MEX文件时要考虑的特定c++语言问题。

您可以在c++应用程序中使用MATLAB C代码示例。例如,请参见mexcpp.cppc++类的例子,它包含C和c++语句。

创建c++源文件

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

编译和链接

要构建一个c++ MEX文件,输入:

墨西哥人文件名. cpp

在哪里文件名是MATLAB路径上的源代码文件的名称。

您只能在与文件编译所用的MATLAB版本相同的系统上运行c++ MEX文件。

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

请勿使用mxFreemxDestroyArray用于mex函数的类的c++析构函数中的函数。如果mex -函数抛出错误,MATLAB将清除mex -文件变量,如MEX文件中临时数组的自动清理

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

使用mexPrintf打印到MATLAB命令窗口

使用cout或c语言printf函数在c++ MEX文件中不能正常工作。使用mexPrintf函数来代替。

c++类的例子

墨西哥人文件mexcpp.cpp演示如何使用C语言的MEX文件的c++代码。这个例子使用了来自C Matrix API的函数。它使用成员函数、构造函数、析构函数和iostream包含文件。

函数定义了一个类myData与成员函数显示set_data和变量v1v2.它构造了一个对象d类的myData的初始化值v1v2.然后,它集v1v2并显示新值。最后,删除操作符清除对象。

要构建这个示例,将文件复制到MATLAB路径,并在命令提示符类型下:

墨西哥人mexcpp.cpp

调用语法是mexcpp (num1, num2)

c++文件处理示例

mexatexit.cpp示例演示了c++文件处理特性。将其与C代码示例进行比较mexatexit.c,它使用mexAtExit函数。

c++的例子

c++的例子使用了fileresource类来处理文件打开和关闭函数。MEX函数调用该类的析构函数,析构函数关闭数据文件。当对数据文件执行操作时,此示例还会在屏幕上打印一条消息。然而,在这种情况下,执行的唯一C文件操作是写操作,

构建mexatexit.cppMEX文件,复制文件到MATLAB路径和类型:

墨西哥人mexatexit.cpp

类型:

z ='for the c++ MEX-file';mexatexit (x) mexatexit (z)清晰mexatexit
将数据写入文件。将数据写入文件。

显示matlab.data

类型matlab.data
我的输入字符串为c++的mex -文件

C的例子

C代码示例注册mexAtExit函数在MEX文件清除时执行清理任务(关闭数据文件)。下面的示例在屏幕上打印一条消息mexPrintf执行文件操作时打开外部文件,文件关闭

构建mexatexit.cMEX文件,复制文件到MATLAB路径和类型:

墨西哥人mexatexit.c

运行示例。

x =“我的输入字符串”;mexatexit (x)
matlab.data打开文件。将数据写入文件。

清除MEX文件。

清晰的mexatexit
matlab.data关闭文件。

显示matlab.data

类型matlab.data
我的输入字符串

另请参阅

|

相关的例子

更多关于