Re: problem with MLGetReal64Array
- To: mathgroup at smc.vnet.net
- Subject: [mg84796] Re: problem with MLGetReal64Array
- From: GS <vokaputs at gmail.com>
- Date: Tue, 15 Jan 2008 03:11:15 -0500 (EST)
- References: <fm9an9$ipe$1@smc.vnet.net> <fmf7q3$dm1$1@smc.vnet.net>
On Jan 14, 12:51 am, Jens-Peer Kuska <ku... at informatik.uni-leipzig.de> wrote: > Hi, > > and you think that the Mathematica Kernel know that > you wish to get a Real64Array[] and not a > List[List[___Real]..] > ?? > > Regards > Jens > > GS wrote: > > I am trying to compile a c program that uses MathLink, to be able to > > execute an external c-code from Mathematica. I use Mathematica 6.0.1 > > on Windows XP and a gcc compiler from cygwin with -mno-cygwin option. > > There were no problems with compiling and running the addtwo example > > rom the Mathematica tutorial. Since I will need to transfer arrays > > from and to Mathematica, I also want to learn how to use MLPutReal64Array > > and MLGetReal64Array functions. > > > I did not have a problem with compiling an example with > > MLPutReal64Array from Mathematica online tutorial. However, the following > > example with MLGetReal64Array does not work for me (see the code > > below). The code compiles without errors, however, when I Install[] > > it, and run the command > > getRealArray[{{1., 2.}, {4., 5.}}] > > it crashes the link with the message "LinkObject::linkd: Unable to > > communicate with closed link ...". > > > Did anybody succeed in compiling this example? > > Thanks. > > > PS. My attempt to compile with Microsoft Visual C gives the same > > result (link crash). > > > ******************** array.c *************************** > > #include "mathlink.h" > > > /* read an array of double-precision floating-point numbers from a > > link */ > > > void get_real_array(MLINK lp) > > { > > double *data; > > int *dims; > > char **heads; > > int d; /* stores the rank of the array */ > > > if(! MLGetReal64Array(lp, &data, &dims, &heads, &d)) > > { > > /* unable to read the array from lp */ > > return; > > } > > > MLReleaseReal64Array(lp, data, dims, heads, d); > > } > > > int main(int argc, char* argv[]) > > { > > return MLMain(argc, argv); > > } > > ********************* end of array.c**************************** > > > ********************* array.tm******************************** > > :Begin: > > :Function: get_real_array > > :Pattern: getRealArray[x_] > > :Arguments: {x} > > :ArgumentTypes: {Manual} > > :ReturnType: Null > > :End: > > :Evaluate: getRealArray::usage = "gets a matrix of reals." > > ************************************************************** Hi Jens, I am not sure that I understand your question, but it looks like you see what my problem is. I would appreciate it very much if you could point out how I should fix the code. Thank you. GS