最近做实验碰到一些时效性问题,matlab下的代码太慢了,需要用c来写,然后mex编译成mexw32文件。
简单介绍一下c语言接口
先给一个基本的框架
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
//your code
}
nrhs (number of right-hand side) 是输入参数的个数
plhs和prhs都是操作数的指针,因为左右操作数都有可能是多个嘛,当然要用指针了
- 转标量
double a, b;
a = mxGetScalar(prhs[0]);
b = mxGetScalar(prhs[1]);
- 指针赋值
c = mxGetPr(plhs[0]);
*c=add(a,b);
double *A = mxGetPr(prhs[0]);
int M = mxGetM(prhs[0]);//知道行
int N = mxGetN(prhs[0]);//知道列
- 输出参数
输出参数需要在mex函数里申请内存,才能将指针放到plhs[]中传递出去,由于返回指针必须是mxArray类型的,matlab专门提供了一个函数mxArray *pMxC = mxCreateDoubleMatrix(M,N,mxREAL);