我需要从Matlab调用C ++代码。我知道我必须编写一个mex包装器,但我无法弄清楚如何正确传递参数。
要调用的C ++函数是:
foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4)
x
是进行计算的矩阵,y
是输出向量。我无法传递对应于矩阵维度的整数参数。
我写了以下包装器:
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]
)
{
double *x, *y;
int *n3,*n4;
mwSize nrow,ncols;
x = mxGetPr(prhs[0]);
n3 = mxGetPr(prhs[1]);
n4 = mxGetPr(prhs[2]);
nrow = mxGetM(prhs[0]);
ncols = mxGetN(prhs[0]);
/* Create a matrix for the return argument */
plhs[0] = mxCreateDoubleMatrix(nrow, 1, mxREAL);
y = mxGetPr(plhs[0]);
foo(*nrow,*ncols,*n3, x,y,*n4);
return;
}
但是,当我尝试编译时,会出现以下错误:
我似乎无法弄清楚如何使这项工作。任何帮助,将不胜感激。
答案 0 :(得分:3)
有一些错误,像这样使用它,你需要将其强制转换为mwSize以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
Anad的另一个变化是使用'&'传递指针而你不需要给* n4
foo(&nrow,&ncols,n3, x,y,n4);
答案 1 :(得分:0)
warning C4267: '=' : conversion from 'size_t' to 'mwSize', possible loss of data (n3-n4 line)
warning C4267: '=' : conversion from 'size_t' to 'mwSize', possible loss of data (nrow,ncol line)
此处您的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为size_t
,因此您也应该匹配您的变量。
至少,这是我的第一个想法。但我错了:当你传递(分别应该传递)变量的地址时,你应该将它们与函数所需的类型相对应。
error C2100: illegal indirection (foo line)
很明显:您希望通过*nrow
和*ncols
实现什么目标?它们不是指针,因此使用*
毫无意义。