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就对了,大功告成。

参考:

  1. http://blog.sina.com.cn/s/blog_6ec1700e0100rqlh.html
  2. http://blog.csdn.net/zouxy09/article/details/20553007

2016年3月10日补充:MATLAB C++ Resources 这是MATHWORK公司推出的M文件和C转换的教程。有时间可以研究研究嘿嘿。这是他们的介绍文档:MATLAB TO C MAKE EASY

原文地址:https://www.cnblogs.com/vincentQin/p/5406011.html