Saya memiliki kode ini di 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;
 }

//...

Dan saya ingin menyebutnya menggunakan Matlab. Untuk melakukan ini, saya telah membuat mexFunction() . ini

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

Namun, saya tidak tahu cara mendapatkan nilai aa, ketika saya memanggil callFun() di Matlab.

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

Apakah mungkin untuk meningkatkan mexFunction untuk kinerja yang lebih baik?

2
SHdotCom 21 September 2019, 15:28

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan mxCreateDoubleScalar:

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

Saya sarankan Anda memberikan nilai ke double, karena itu adalah tipe asli MATLAB. Anda dapat meneruskan int sebagai int32 ke MATLAB, tetapi itu lebih terlibat dan tidak nyaman.

0
Cris Luengo 22 September 2019, 14:05