原本写给一个朋友的,帮助她入门matlab与C混编的
>#####环境: * Matlab:MATLAB R2013a * C编译器VC++2012 === #####配置环境: 在**Matlab**命令行下输入: **step.1** ``` mex -setup ``` --- **step.2** 你也可以使用: ``` help mex ``` 查看更多信息 --- **step.3** 按提示安装C编译器 --- **step.4** 编写**c-mex**文件 可使用 ``` edit ``` 命令在matlab中打开编辑器 === #####**C-MEX**文件的结构: * 引入头文件: ``` #include "mex.h" ``` * 定义计算子函数 ``` double add(double x, double y) { return x + y; } ``` *引入接口函数 ``` void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /*your code*/ } ``` ==== ####说明: > 核心是计算子函数,在C语言中函数要先声明才能使用,所以计算子函数的函数声明放在前面。 > 接口函数是C语言和matlab的接口,或者理解成协议,桥梁也可以,它接受4个参数:nlhs是左手参数个数,plhs是左手参数数组其内容为指针,该指针指向数据类型为mxArray的变量。相对应的nrhs和prhs。 > 编写的**C-Mex**文件应该保存为.c文件,文件类型是**all file**,尤其要强调的一点是,该文件的文件名要和函数的函数名一致,不然使用的时候会报**undefined function**的错误 >当启用mex之后,你可以使用这段程序来检查环境是否正确: ``` [print.c] # include "mex.h" void mexFunction(int nlhs,double *plhs[],int nrhs,double *prhs[]){ mexPrintf("hello"); } ``` 保存为print.c之后命令行运行 ``` >>mex print.c >>print ``` 如果编译没问题,打印出hello>>这种形式,那么说明环境ok > 下面是一个完整的例子及其过程 : ``` [add.c] #include "mex.h" double add(double x, double y) { return x + y; } void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[]) { double *a; double b, c; plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); a = mxGetPr(plhs[0]); b = *(mxGetPr(prhs[0])); c = *(mxGetPr(prhs[1])); *a = add(b, c); } ``` 在命令行中执行 ``` mex add.c ``` 来编译它 若无报错,再执行 ``` c=add(1.1,2.2) ``` 则c的值即是3.3 关于此段程序,可参考 [这篇文章](http://blog.sina.com.cn/s/blog_468651400100coas.html)
时间: 2024-12-30 03:31:48