原本写给一个朋友的,帮助她入门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)