MATLAB调用VISUAL STUDIO 编写的C++函数
测试平台:
MATLAB 2014a VISUAL STUDIO 2013
Matlab调用C++函数的相关格式和注意事项:
以下是名为mexAdd.cpp这个c++文件的代码:
#include "mex.h"
//必须有这个声明
using namespace std;
double add(double x, double y)
//这是自定义的函数,整个函数要实现的功能
{
double s;
s=x+y;
return(s);//就是实现了加法的功能
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
//必须定义这个函数mexFunction,这相当于一个参数传输机,构建起了MATLAB和VS之间桥梁
{
// nlhs: 感觉是number of left hand size parameters,也就是Matlab调用语句左边的变量个数,
// 实际上就是需要返回给Matlab的返回值变量有多少个。例如上面c = add(a, b);就只有一个返回参
// 数c,所以nlhs就是1;
// plhs: 感觉是pointer of left hand size parameters,也就是函数返回参数的指针。但它是一个指
// 针数组。换句话说,它是一个数组,每个元素是个指针,每个指针指向一个数据类型为mxArray
// 的返回参数。例如上面c = add(a, b);就只有一个返回参数c,所以该数组只有一个指针,plhs[0]
// 指向的结果会赋值给c。
// nrhs: 这个是number of right hand size parameters,也就是Matlab调用语句右边的变量个数。
// 例如上面c = add(a, b),它给c++代码传入了两个参数a和b,所以nrhs为2;
// prhs:这个是pointer of right hand size parameters,和plhs类似,因为右手面有两个自变量,
// 即该数组有两个指针,prhs[0]指向了a,prhs[1]指向了b。要注意prhs是const的指针数组,
// 即不能改变其指向内容。
double *a;
double b, c;
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
a = mxGetPr(plhs[0]);
b = *(mxGetPr(prhs[0]));//输入量传给b
c = *(mxGetPr(prhs[1]));//输入量传给c
*a = add(b, c); //调用add()函数
}
接下来就是在MATLAB里面调用c++函数的代码(前提已经选择好了VS作为默认的编译器):
mex mexAdd.cpp
然后MATLAB命令窗口会出现:
使用 ‘Microsoft Visual C++ 2013 Professional’ 编译。MEX 已成功完成。
然后就调用函数:
n=mexAdd(0.5,3)//注意不是调用add(0.5,3)!
结果n=3.5就对了,大功告成。
参考:
- http://blog.sina.com.cn/s/blog_6ec1700e0100rqlh.html
- http://blog.csdn.net/zouxy09/article/details/20553007
2016年3月10日补充:MATLAB C++ Resources 这是MATHWORK公司推出的M文件和C转换的教程。有时间可以研究研究嘿嘿。这是他们的介绍文档:MATLAB TO C MAKE EASY