Как передать в качестве ввода mex-функции целочисленное значение? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь передать в качестве аргумента мексфункции целое число, представляющее количество столбцов для 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 в качестве входных данных для подпрограммы, потому что она на самом деле не используется там, а только в основном, для определения размера выходного массива.

Ожидается, что у меня будет матрица 1x100 для выходного массива, если я вызову myfun ('examplefile.txt', 100), вместо этого матрица, которая отображается в конце вызова, имеет бесконечное / очень длинное число столбцов. .

Кто-то может помочь с этим?

1 Ответ

1 голос
/ 27 марта 2019

Вы конвертируете указатель на значение в size_t, а затем int. Но это указатель, адрес в ОЗУ расположения значения, а не самого значения.

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

Вместо этого получите значение.

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