(octave.info)Calling Other Functions in Mex-Files


Prev: Sparse Matrices with Mex-Files Up: Mex-Files
Enter node , (file) or (file)node

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.


automatically generated by info2www version 1.2.2.9