Previous: Sparse Matrices with Mex-Files, Up: Mex-Files [Contents][Index]

#### 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 || ! mxIsString (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.