如何在 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,但这涉及更多且不那么方便。
我在 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,但这涉及更多且不那么方便。