Previous: Sparse Matrices with Mex-Files, Up: Mex-Files


A.2.7 Calling Other Functions in Mex-Files

It is also possible 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

     /*
     
     Copyright (C) 2006, 2007 John W. Eaton
     
     This file is part of Octave.
     
     Octave is free software; you can redistribute it and/or 
     modify it under the terms of the GNU General Public License 
     as published by the Free Software Foundation; either
     version 3  of the License, or (at your option) any later 
     version.
     
     Octave is distributed in the hope that it will be useful, 
     but WITHOUT ANY WARRANTY; without even the implied warranty
     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the GNU General Public License for more details.
     
     You should have received a copy of the GNU General Public 
     License along with Octave; see the file COPYING.  If not,
     see <http://www.gnu.org/licenses/>.
     
     */
     
     #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 ("function name expected");
     
       str = mxArrayToString (prhs[0]);
     
       mexPrintf ("I'm going to call the function %s\n", str);
     
       mexCallMATLAB (nlhs, plhs, nrhs-1, 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.