Matlab与C++混合MEX编程

一、mexFunction
与C中的main函数一样,MEX程序中的开始函数为mexFunction.默认变量参数是:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
其中
nlhs指的是在调用函数时返回值的个数;
plhs[]是每个返回值(在MATLAB中都是矩阵)的指针;
nrhs指的是调用函数时的参数个数;
prhs[]是每个参数的指针。
 
在函数内部调用时,常用函数用法如下:
 
mxIsNumeric(prhs[0]); // 判断变量是否是数字
mxIsDouble(prhs[0]);   // 判断变量是否为双精度
mxIsEmpty(prhs[0]);     // 判断变量是否为空值
mxIsComplex(prhs[0]); // 判断变量是否为复数
mexPrintf("%d", y);     // 命令行中打印数据
 
x           = mxGetN(prhs[0]);                     // 获取各输入参数的长度
y           = mxGetM(prhs[1]);                     // 获取输入参数的列数
points = mxGetScalar(prhs[1]); // 将返回变量的实部,为双精度形数据
plhs[0]= mxCreateDoubleMatrix(1, 1, mxREAL); // 创建1×1双精度返回变量
 
x           = mxGetData(prhs[0]); // 获取变量的指针,功能相当于mxGetPr()
y           = mxGetPr(plhs[0]);     // 获取变量的指针,数据为实数
 
对mexFunction的参数是进行指针操作的,不能用单纯的return返回值。MEX程序传送回来的整数数据要变为双精度型数据,才能为其它函数所处理。

二、例子:对 MaxPooling.cpp与StochasticPooling.cpp的编译
if exist('MaxPooling')~=3
    mex MaxPooling.cpp COMPFLAGS="/openmp $COMPFLAGS" CXXFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp" -largeArrayDims 
end;
if exist('StochasticPooling')~=3
    mex StochasticPooling.cpp COMPFLAGS="/openmp $COMPFLAGS" CXXFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp" -largeArrayDims 
end;

转自:http://blog.csdn.net/tina_lulu_21/article/details/7198941

你可能感兴趣的:(C++,matlab,mex编程)