Calling Other Functions in Mex-Files - Untitled
Description: Untitled

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.