主要内容

C MEX文件应用程序

用MATLAB编写C程序®R2017b或更早版本,使用mxArray

您可以从MATLAB命令行调用自己的C或c++程序,就像它们是内置函数一样。这些程序称为MEX函数,函数名就是MEX文件名。MEX函数并不适用于所有应用程序。MATLAB是一个高生产率的环境,它的专长是消除耗时的、低层次的编译语言编程。一般来说,用MATLAB编程。除非应用程序需要,否则不要使用MEX函数。

要创建MEX函数,请使用MATLAB api编写程序。这些库中的函数方便了MEX函数和工作空间之间的数据传输。要选择MATLAB API,请考虑以下内容。

  • MathWorks建议使用现代c++特性创建MEX函数,如MATLAB数据API.有关更多信息,请参见c++墨西哥人的应用程序

  • 如果你的MEX函数必须在MATLAB R2017b或更早的版本中运行,或者你更喜欢在C语言中工作,那么使用矩阵C API和C MEX API。这些api使用MATLABmxArray数据结构。本页的功能和主题是基于mxArray

请注意

从C Matrix API或MATLAB Data API中选择函数;您不能混合使用这些api中的函数。

将源文件构建为可执行程序墨西哥人函数。您还可以与其他MATLAB用户共享MEX文件。

有关编写s函数的信息,请参阅Simulink金宝app®文档。

要调用其他人创建的MEX函数,请参见墨西哥人文件函数

如果您有一个C/ c++程序,并希望从程序中调用MATLAB函数,那么可以使用其中一个引擎api。

如果你想从C/ c++程序中读写MATLAB数据,那么使用读mat文件数据的MATLAB C API

功能

墨西哥人 构建MEX功能或引擎应用程序
dbmex 打开mex文件调试UNIX平台

C API墨西哥人

mexFunction 用C Matrix API构建的C/ c++ MEX函数的入口点
mexFunctionName 当前MEX函数名
mexAtExit 注册当MEX函数清除或时调用的函数MATLAB终止
mexCallMATLAB 调用MATLAB函数、用户定义函数或MEX函数
mexCallMATLABWithTrap 调用MATLAB函数、用户定义函数或MEX文件并捕获错误信息
mexEvalString 执行MATLAB调用者工作区中的命令
mexEvalStringWithTrap 执行MATLAB在调用者工作区中执行命令并捕获错误信息
mexGetVariable 从指定的工作区复制变量
mexGetVariablePtr 从另一个工作区指向变量的只读指针
mexPutVariable 数组从MEX函数到指定的工作空间
mexGet 指定图形属性的值
mexSet 设置指定图形属性的值
mexPrintf ANSICPRINTF-style输出例程
mexErrMsgIdAndTxt 用标识符显示错误消息并返回MATLAB提示
mexWarnMsgIdAndTxt 带有标识符的警告消息
mexIsLocked 确定MEX文件是否被锁定
mexLock 防止从内存中清除MEX文件
mexUnlock 允许从内存中清除MEX文件
mexMakeArrayPersistent 在MEX文件完成后使数组保持
mexMakeMemoryPersistent 使内存分配为MATLAB在MEX函数完成后保持

主题

编写C MEX函数

创建C源MEX文件

这个例子展示了如何创建arrayProduct用C Matrix API构建的C MEX函数。

表的MEX函数源代码示例

链接到MEX函数示例的源代码。

MATLAB数据

使用mxArray在墨西哥人的文件。

内存管理问题

规则管理mxArray内存。

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

在使用C Matrix API创建MEX函数时需要考虑的c++语言问题。

错误处理在C MEX文件

使用。打印错误信息mexErrMsgIdAndTxt函数。

在MEX文件中处理大文件I/O

如何在MEX文件中使用64位文件I/O。

对最派生类的测试

如何从MEX文件输入参数中排除内置类型的子类。

C Matrix API版本

升级MEX文件以使用交错复杂API

MATLAB版本9.4 (R2018a)支持复数的交错表金宝app示。

升级MEX文件到使用64位API

MATLAB版本9.2 (R2017a)默认使用64位API构建MEX文件。

升级MEX文件到使用图形对象

MATLAB版本8.4 (R2014b)将句柄的数据类型更改为图形对象对象

墨西哥人分享文件

在MEX文件中文档构建信息

这个例子展示了如何记录xtimesy在Windows上构建的MEX文件®使用Microsoft的平台®Visual c++®编译器。

故障排除

构建错误

当MEX失败时获得帮助

要帮助诊断编译器设置和构建错误,请调用墨西哥人函数带有verbose选项-v。

MEX文件编译失败

当编译MEX文件失败时应该做什么。

解决MEX API不兼容问题

有关警告和错误消息的更多信息。

使用MinGW-w64编译C/ c++ MEX文件

用MinGW-w64编译器构建的MEX文件的故障排除。

符号mexFunction未解析或未定义

每个MEX文件需要一个mexFunction

运行时错误

MEX文件错误无效

当你得到一个无效的MEX文件错误时该怎么做。

墨西哥人版本兼容性

为了获得最好的结果,运行用MATLAB版本构建的MEX文件。

墨西哥人平台的兼容性

如果您从其他来源获得一个二进制MEX文件,请确保该文件是针对您希望在其上运行它的相同平台编译的。

MEX API不是线程安全的

不要从一个MEX文件在单独的线程上调用MATLAB的单个会话。

MEX文件分段故障

当MEX文件导致段冲突或断言时该怎么办?

MEX文件生成错误结果

当MEX生成错误答案时该怎么办?

调试

在Microsoft Windows平台上进行调试

使用Microsoft Visual Studio进行调试的建议®

Mac平台上的调试

这个例子展示了如何调试一个MEX文件Mac平台。

Linux平台上的调试

这个例子展示了如何调试Linux上的MEX文件®平台。