Previous: , 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 ("Hello, World!\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);

  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

myfeval ("sin", 1)
a = myfeval ("sin", 1)
⇒ Hello, World!
    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.