| MATLAB Application Program Interface | Search  Help Desk |
| mexEvalString | Examples See Also |
Execute a MATLAB command in the workspace of the caller
#include "mex.h" int mexEvalString(const char *command);command
mexEvalString to invoke a MATLAB command in the workspace of the caller.
mexEvalString and mexCallMATLAB both execute MATLAB commands. However, mexCallMATLAB provides a mechanism for returning results (left-hand side arguments) back to the MEX-file; mexEvalString provides no way for return values to be passed back to the MEX-file.
All arguments that appear to the right of an equals sign in the command string must already be current variables of the caller's workspace.
Consider an M-file named FibSqr.m that invokes a MEX-file named CalcFib:
function r = FibSqr(n) CalcFib(n); % CalcFib loads the nth Fibonacci number into variable fib. r = fib .^ 2;Suppose the
CalcFib calculates the nth Fibonacci number. (MEX-files tend to calculate Fibonacci numbers significantly faster than M-files.) CalcFib calls mexEvalString to write the result into a variable named fib.
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray
*prhs[])
{
int n, c, status;
double answer, most_recent, next_most_recent;
char command_string[20];
/* Find the nth Fibonacci number. */
n = (int)mxGetScalar(prhs[0]);
if (n < 1)
mexErrMsgTxt("First argument must be positive");
else if (n<3)
mexEvalString("fib = 1;");
else {
for (most_recent=1, next_most_recent=1, c=3; c<=n; c++)
{
answer = most_recent + next_most_recent;
next_most_recent = most_recent;
most_recent = answer;
}
sprintf(command_string, "fib = %g", answer);
status = mexEvalString(command_string);
if (status)
mexErrMsgTxt("Could not Calculate this Squibonacci
number.");
}
}
Invoking FibSqr yields
>> FibSqr(7));
fib =
13
ans =
169
For an additional example, see mexevalstring.c in the mex subdirectory of the examples directory.
mexCallMATLAB