如何将整数值作为mex函数的输入传递?

时间:2019-03-27 08:32:49

标签: c++ matlab mex

我正在尝试将mexfunction的参数作为整数传递,该整数表示mxCreateDoubleMatrix的列数。除了在主要的mexFunction中,不应在其他任何地方使用该整数。

以某种方式,这似乎不起作用。


// mex function for calling c++ code .
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    char *input_buf;
    size_t buflen;
    double ncols;
    double *result_final;
    double *result_second;

    /* get the length of the input string */
    buflen = (mxGetM(prhs[0]) * mxGetN(prhs[0])) + 1;

    /* copy the string data from prhs[0] into a C string input_ buf.    */
    input_buf = mxArrayToString(prhs[0]);

    /* copy the int from prhs[0] to decide on length of the results.    */
    ncols = (int) (size_t) mxGetPr(prhs[1]);

    plhs[0] = mxCreateDoubleMatrix(1, ncols, mxREAL);
    plhs[1] = mxCreateDoubleMatrix(1, ncols, mxREAL);
    result_final = mxGetPr(plhs[0]);
    result_second = mxGetPr(plhs[1]);

    /* Do the actual computations in a subroutine */
    subroutine(input_buf, buflen, result_final, result_second);
}

如果我删除了ncols行,则其余所有工作都将按预期进行。我没有将ncols作为子例程的输入,因为它实际上并未在子例程中使用,而仅在主例程中用于定义输出数组的大小。

如果我调用myfun('examplefile.txt',100),则我希望输出数组的矩阵为1x100,而是在调用结束时显示的矩阵具有无限/非常长的列数

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您正在将指向值的指针转换为size_t,然后转换为int。但是它是一个指针,值在RAM中的地址,而不是值本身。

 ncols = (int) (size_t) mxGetPr(prhs[1]); %mex Get Pointer!!

获取值。

 ncols = (int)(mxGetScalar(prhs[1]));