octave: Calling Other Functions in Mex-Files
A.2.7 Calling Other Functions in Mex-Files
------------------------------------------
It is possible to call other Octave functions from within a mex-file
using ‘mexCallMATLAB’. An example of the use of ‘mexCallMATLAB’ can be
see in the example below.
#include "mex.h"
void
mexFunction (int nlhs, mxArray* plhs[],
int nrhs, const mxArray* prhs[])
{
char *str;
mexPrintf ("Starting file myfeval.mex\n");
mexPrintf ("I have %d inputs and %d outputs\n", nrhs, nlhs);
if (nrhs < 1 || ! mxIsChar (prhs[0]))
mexErrMsgTxt ("ARG1 must be a function name");
str = mxArrayToString (prhs[0]);
mexPrintf ("I'm going to call the function %s\n", str);
if (nlhs == 0)
nlhs = 1; // Octave's automatic 'ans' variable
/* Cast prhs just to get rid of 'const' qualifier and stop compile warning */
mexCallMATLAB (nlhs, plhs, nrhs-1, (mxArray**)prhs+1, str);
mxFree (str);
}
If this code is in the file ‘myfeval.c’, and is compiled to
‘myfeval.mex’, then an example of its use is
a = myfeval ("sin", 1)
⇒ Starting file myfeval.mex
I have 2 inputs and 1 outputs
I'm going to call the interpreter function sin
a = 0.84147
Note that it is not possible to use function handles or inline
functions within a mex-file.