Как вернуть выходные данные mexFunction () в Matlab? - PullRequest
1 голос
/ 21 сентября 2019

У меня есть этот код в C:

#include <mex.h>
#include <matrix.h>
#include<stdio.h>
#include <math.h>

//...

 int callFun(int argc, char *argv[]){
     int aa = 4;
     printf ( "\naa value = %d\n",aa);
 return aa;
 }

//...

, и я хочу вызвать его с помощью Matlab.Для этого я создал mexFunction ()

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
    int argc = 0;
    char **argv;
    int i, result;

    argc = nrhs;
    argv = (char **) mxCalloc( argc, sizeof(char *) );

    for (i = 0; i < nrhs; i++){
        if( !mxIsChar( prhs[i] ) ){
        mexErrMsgTxt("Input must be of type char.");
        return;
        }
        argv[i] = mxArrayToString( prhs[i] );
    }

    result = callFun( argc, argv );

    for( i=argc-1; i>=0; i-- )
        mxFree( argv[i] );

    mxFree( argv );
    if( result )
        mexErrMsgTxt("main function causes an error");
}

Однако я не знаю, как получить aa значение, когда я вызываю callFun () в Matlab.

>> Outputs = callFun('callFun','ff');  % this should returns aa value

Можно ли улучшить mexFunction для повышения производительности?

1 Ответ

0 голосов
/ 22 сентября 2019

Вы можете использовать mxCreateDoubleScalar:

plhs[0] = mxCreateDoubleScalar((double)result);

Я предлагаю вам привести значение к double, так как это собственный тип MATLAB.Вы можете передать int как int32 в MATLAB, но это более сложно и не так удобно.

...