ok guys, feel if i'm falling rabbit hole...
to build interface matlab-mex receives several different messages consist of complicated c-structs, want create corresponding mex-structs each in different functions.
is somehow possible pass mxarrays contain fields user defined functions mexfunction()?
i created functions should called inside of mexfunctions() should pass filled mxarray  datatypes mexfunction() pointers didn't work.
e.g.
mxarray* createfoo(); or
void createfoo(mxarray* mydata); inside mexfunction() these createfoo() functions couldn't pass created data pointers function. inside them, creating of data did work, pointers returned changed mysteriously because of e.g. mydata = mxcreatedoublematrix().
the compiler visual studio 2010, matlab 2011b.
it possible directly write workspace inside functions, bad style.
ok, should never again ask question without minimal example. simple problem was, forgot return *mxarray...
both possibilities pass mxarray work should:
a) return mxarray*
mxarray* createfoo() {     mxarray* myarray;      myarray = mxcreatedoublematrix(1,1,mxreal);      *mxgetpr(myarray) = 3;      mexprintf("*mxgetpr(myarray)= %f\n", *mxgetpr(myarray)); // 3      return myarray; } b) reference mxarray **
void createfooreference(mxarray** myarray) {     *myarray = mxcreatedoublematrix(1,1,mxreal);      *mxgetpr(*myarray) = 4;      mexprintf("pointer: *mxgetpr(*myarray)= %f\n", *mxgetpr(*myarray)); // 4 } now it's possible call functions , return values matlab:
void mexfunction( int nlhs, mxarray *plhs[], int nrhs, const mxarray prhs[]) {     mxarray *mexa, *mexb;      mexa = createfoo();     plhs[0] = mexa; // 3      createfooreference(&mexb)     plhs[1] = mexb; // 4 } 
Comments
Post a Comment