next up previous
Next: Débogage d'un fichier MEX Up: Les fichiers MEX exécutables Previous: Compilation

Exemple de fichier MEX en C : twotimes.c

#include "mex.h"
#include <math.h>

void timestwo(double y[], double x[])
{
  y[0] = 2.0*x[0];
  return;
}

void mexFunction( int nlhs, mxArray *plhs[],     
                  int nrhs, const mxArray *prhs[] ) 
{ double *y;
  double *x;
  unsigned int m, n;
  /* Check for proper number of arguments. */
  if (nrhs !=1) {
    mexErrMsgTxt("Only one input argument allowed."); }
  else if (nlhs !=1) {
    mexErrMsgTxt("Only one output argument allowed."); }
  /* The input x must be a scalar, get the size of x. */
  m = mxGetM(prhs[0]);  /* rows    */
  n = mxGetN(prhs[0]);  /* columns */
  if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0])
      || mxIsSparse(prhs[0]) || !mxIsDouble(prhs[0])
      || !(m ==1 && n ==1))
  {
    mexErrMsgTxt("Input x must be a scalar.");
  }

  /* Create a matrix for the return argument. */
  plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL);
  /* Assign pointers to each input and output. */
  y = mxGetPr(plhs[0]);
  x = mxGetPr(prhs[0]);
  /* Call the timestwo subroutine. */
  timestwo(y, x);
}
Il est important de faire les vérifications de type car MATLAB n'a pas la même représentation de variable que C. Vérifier la validité des types réduit le risque d'erreur.



Olivier Ricou
10/6/1997