如何在 Matlab 中 return mexFunction() 的输出?

How to return the outputs of mexFunction() in Matlab?

我在 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");
}

但是,当我在 Matlab 中调用 callFun() 时,我不知道如何获得 aa 值。

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

是否可以改进 mexFunction 以获得更好的性能?

您可以使用 mxCreateDoubleScalar:

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

我建议您将该值转换为 double,因为这是 MATLAB 的原生类型。您可以将 int 作为 int32 传递给 MATLAB,但这涉及更多且不那么方便。