开发者

error messages when writing Mex files, problem with array output from functions?

I am more of a Matlab programmer, and have not used C in years! Now I have to write some code in C and have it called from Matlab via the mexFunction command. So far so good. But my code requires many function calls where both the argument an开发者_开发问答d the return values are arrays. For this I am using pointer returns. But I have run into about a million difficulties, once one is fixed another is created.

example of the sort code is as follows (the actual code is massive)

#include "mex.h"
#include "math.h"

int Slength=95;


double innercfunction(double q,double y)
{
  int i;
  double X;

  X=q*y;

}

double *c1function(double q,double Sim[])
{
  double *F12=malloc(Slength);
  int i;
  double vdummy,qdummy;
  qdummy=q;

  for(i=0;i<Slength;i++)
  {
    vdummy=Sim[i];
    F12[i]=innercfunction(qdummy,vdummy);
  }
  return F12;
}


void mexFunction(int nlhs, mxArray *prhs[],int nrhs,const mxArray *plhs[])
{
  double *q=mxGetPr(prhs[0]);
  double *Sim=mxGetPr(prhs[1]);

  double *SS=c1function(q,Sim);
}

i save it as help_file.c and compile from THE MATLAB workspace as:

mex -g help_file.c

to which i get the following error:

help_file.c: In function ‘mexFunction’:
help_file.c:38: error: incompatible type for argument 1 of ‘c1function’
help_file.c:17: note: expected ‘double’ but argument is of type ‘double *’

i tried initially passing Sim[i] instead of vdummy, that did not work which is why I defined the dummy variable in the first place.

I imagine this is a trivial problem, but I would still appreciate peoples help on this.


The prototype of clfunction requires you to pass a scalar double as the first argument; you're passing a pointer-to-double q, hence the compiler error. Are you expecting prhs[0] to contain a scalar? If so, you could use q[0] to extract the value; or else, you could use mxGetScalar(prhs[0]) which returns a scalar-double ( http://www.mathworks.com/help/techdoc/apiref/mxgetscalar.html ).

However, I'm not sure that fixing that would make your mex file work as expected. I would suggest taking some time to read the mex examples here: http://www.mathworks.com/support/tech-notes/1600/1605.html

In particular, your current mex file isn't going to produce any output arguments since you aren't assigning to the left-hand side plhs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜