通过MEX将C 链接到MATLAB:通过参数
Linking C++ to Matlab via mex: passing arguments
我需要从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;
}
但是,当我尝试编译时,会出现以下错误:
- 警告C4267:'=':从'size_t'转换为" mwsize",可能的数据丢失(N3-N4行)
- 警告C4267:'=':从'size_t'转换为" mwsize",可能的数据丢失(nrow,ncol line)
- 错误C2100:非法间接(FOO线)
我似乎无法弄清楚如何完成这项工作。任何帮助,将不胜感激。
有一些错误,这样使用,您需要将其施放以避免警告:
nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
其他变化是使用"&"传递指针。而且您不需要给 *n4
foo(&nrow,&ncols,n3, x,y,n4);
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
实现什么?它们不是指针,因此使用*
是毫无意义的。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 将C++中的多个参数传递给MatLab共享库函数
- 使用 MATLAB 语法的 c++ 函数参数?
- 从MATLAB到C 导出权重和参数
- 传递用于在 C++ 中调用 MATLAB 函数的参数
- 如何在使用 CUDA 和 Matlab 时将矩阵作为参数
- 通过MEX将C 链接到MATLAB:通过参数
- 从C 调用的编译MATLAB函数的输入参数结构
- 使用c++ mex函数从matlab中获取输入参数