提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
matlab中可以调用由C语言生成的mexw64文件,但是无法调试。楼主借鉴了很多人的博客,并自己在Matlab 2020a和Visual Studio 2022上进行了尝试,可以确保调试的正常进行。
提示:以下是本篇文章正文内容,下面案例可供参考
一、mexw64是什么
mexw64文件是matlab和c混编用到的文件,通过mex命令将c文件转换成mexw64供matlab调用(c文件中需要有mexFunction),对于其调用可以通过查看原c文件对于输入输出是怎么定义的,然后像正常函数一样调用就行。但是matlab里面无法单步调试mex函数,故需转到VS上面调试,这里采用VS2022.
二、使用步骤
1.安装VS2022,选择windows通用平台
2.VS下创建C++控制台项目
3.添加新项,命名为testadd.c
#include "mex.h" // 使用MEX文件必须包含的头文件
// 执行具体工作的C函数
double add(double x, double y)
{
return x + y;
}
// MEX文件接口函数
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
double* a;
double* b;
double c, d;
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
a = mxGetPr(plhs[0]);
b = mxGetPr(plhs[1]);
c = *(mxGetPr(prhs[0]));
d = *(mxGetPr(prhs[1]));
*a = add(c, d);
*b = add(c, d) + 1;
}
该处使用的url网络请求的数据。
4.配置外部包含目录,引入mex.h
5.回到matlab,在testadd.c同级目录下生成调用的m文件
clc;
[a,b]=testadd(2.0,3.0);
6.在matlab的运行窗口编译生成mex64文件
mex -g testadd.c
如果没有编译错误,得到testadd.mexw64。
注意:如果出现没有编译器的提示,在matlab的附加功能-获取附加功能中搜索MinGW-w64默认安装即可。
7.VS中调试-附加到进程中连接matlab
8.在VS中设置断点,在matlab中运行m文件,就会跳到VS的断点,可以单步调试
注意如果第二次重新调试,需要在matlab的命令窗口清空旧的mexw64文件
clear testadd.mexw64
总结
调试成功后把mexw64文件copy到任意matlab工程里,就可以像函数调用一样任意使用。