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 :::::::::::::::::::::::::::::::::::::::::::::::::::::