链接C++;通过mex到Matlab:传递参数 我需要调用来自MATLAB的C++代码。我知道我必须编写一个mex包装器,但我不知道如何正确地传递参数 调用的C++函数为: foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4)
链接C++;通过mex到Matlab:传递参数 我需要调用来自MATLAB的C++代码。我知道我必须编写一个mex包装器,但我不知道如何正确地传递参数 调用的C++函数为: foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4),c++,matlab,mex,C++,Matlab,Mex,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]);
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;
}
但是,当我尝试编译时,会出现以下错误:
- 警告C4267:“=”:从“大小”转换为“mwSize”,可能会丢失数据(n3-n4行)
- 警告C4267:“=”:从“大小”转换为“mwSize”,可能会丢失数据(nrow,ncol行)
- 错误C2100:非法间接寻址(foo行)
我似乎不知道该怎么做。任何帮助都将不胜感激 有一些错误,请这样使用,您需要将其强制转换为mwSize以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4
foo(&nrow,&ncols,n3, x,y,n4);
有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4
foo(&nrow,&ncols,n3, x,y,n4);
有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4
foo(&nrow,&ncols,n3, x,y,n4);
有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4
foo(&nrow,&ncols,n3, x,y,n4);
这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为size\t
,因此您也应该匹配变量
至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型
这很清楚:您想用
*nrow
和*ncols
实现什么?它们不是指针,所以使用*
是毫无意义的
这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为size\t
,因此您也应该匹配变量
至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型
这很清楚:您想用
*nrow
和*ncols
实现什么?它们不是指针,所以使用*
是毫无意义的
这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为size\t
,因此您也应该匹配变量
至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型
这很清楚:您想用
*nrow
和*ncols
实现什么?它们不是指针,所以使用*
是毫无意义的
这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为size\t
,因此您也应该匹配变量
至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型
这很清楚:您想用
*nrow
和*ncols
实现什么?它们不是指针,所以使用*
是没有意义的。也许调整变量的类型,使其与实际值匹配会更有用<代码>大小\u t nrow,ncols代码>是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols代码>是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols代码>是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols代码>是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不重要吗?