MLPutRealList vs. sequence of MLPutDouble
- To: mathgroup at smc.vnet.net
- Subject: [mg61724] MLPutRealList vs. sequence of MLPutDouble
- From: "Reese Jones" <rjones at sandia.gov>
- Date: Thu, 27 Oct 2005 05:01:56 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi
I am a new subscriber to the list and I have a seemingly
simple (read: stupid) question: why does this code work
when I send a sequence of reals and not work when I send
a list?
<SNIP>
/* Now initialize and call Mathematica */
env = MLInitialize(NULL);
if (env == NULL) return 1;
link = MLOpen(num_strings, Mparams);
if (link == NULL) return 1;
MLActivate(link);
/* Load the compare function definition into Mathematica */
MLPutFunction(link, "EnterTextPacket", 1);
MLPutString(link, "<<" SCRIPT_NAME ".m");
MLEndPacket(link);
/* call the compare function with x[1], x[2]*/
MLPutFunction(link, "EvaluatePacket", 1);
#if REAL_LIST
MLPutFunction(link, SCRIPT_NAME, 1);
MLPutRealList(link,x,NUM_VARS);
#else
MLPutFunction(link, SCRIPT_NAME, NUM_VARS);
for ( i=0; i<NUM_VARS; i++ ) { MLPutDouble(link, x[i]); }
#endif
MLEndPacket(link);
/* skip any packets before the first ReturnPacket
and then get the result from the calculation */
int pkt;
while( (pkt = MLNextPacket(link), pkt) && pkt != RETURNPKT) {
MLNewPacket(link);
if (MLError(link)) {
fprintf( stderr, "2 Error detected by MathLink:
%s.\n",
MLErrorMessage(link)); }
}
double fn_val=0.0;
MLGetDouble(link, &fn_val);
if (MLError(link)) {
fprintf( stderr, "3 Error detected by MathLink: %s.\n",
MLErrorMessage(link)); }
MLClose(link);
MLDeinitialize(env);
<SNIP>
this is the Mathematica script that is called (it takes a list and
returns a single value) :
(* test[x_Real,x2_Real] := x; *)
test[y_List] := y[[2]];
this is the output:
Error detected by MathLink: MLGet out of sequence.
test : { 0.616000, 29.000000} -> f: 0.000000
thanks
Reese
--
:::::::::::::::::::::::::::::::::::::::::::::::::::::
Reese Jones
Sandia National Laboratories, MS 9042, P.O. Box 0969
Livermore, CA 94551
phone: (925) 294-4744 or (800) 4SANDIA x4-4744
fax: (925) 294-1459
e-mail: rjones at sandia.gov
:::::::::::::::::::::::::::::::::::::::::::::::::::::