problem about MLPutRealArray
- To: mathgroup at smc.vnet.net
- Subject: [mg105322] problem about MLPutRealArray
- From: 董理 <dongli2020 at gmail.com>
- Date: Sat, 28 Nov 2009 01:05:14 -0500 (EST)
Hi all,
I want to send an array A to MathLink, the dimensions of A are 2, 3.
According to the document of MLPutRealArray, I wrote the following snippet:
"
double * A;
double * B;
long dims[2];
long * dims2;
char ** heads;
long d;
*(A+0) = 1.1;
*(A+1) = 1.2;
*(A+2) = 1.3;
*(A+3) = 1.4;
*(A+4) = 1.5;
*(A+5) = 1.6;
dims[0] = 2;
dims[1] = 3;
MLPutFunction(link, "EvaluatePacket", 1);
MLPutFunction(link, "CompoundExpression", 2);
MLPutFunction(link, "Set", 2);
MLPutSymbol(link, "A");
MLPutRealArray(link, A, dims, NULL, 2);
MLPutSymbol(link, "Null");
MLEndPacket(link);
while((packet = MLNextPacket(link)) && packet != RETURNPKT)
MLNewPacket(link);
MLNewPacket(link);
MLPutFunction(link, "EvaluatePacket", 1);
MLPutFunction(link, "ToExpression", 1);
MLPutString(link, "A");
MLEndPacket(link);
while((packet = MLNextPacket(link)) && packet != RETURNPKT) {
printf("packet %i\n", packet);
if(packet == TEXTPKT) {
MLGetString(link, &text);
printf("TEXTPKT:\n");
printf("%s\n", text);
}
MLNewPacket(link);
}
if(!packet) {
printf("packets receiving error: %s\n", MLErrorMessage(link));
} else {
if(!MLGetRealArray(link, &B, &dims2, &heads, &d)) {
printf("MLGetRealArray: internal errror: %s\n", MLErrorMessage(link));
return;
}
}
"
The B is:
1.100000 1.200000 1.300000 1.400000 1.500000
So why is that? Isn't "dims" the dimensions of A? The document of
MLPutRealArray and MLPutReal64Array are wrong!
DONG Li