MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: IMAP interface to Mathematica
  • Next by Date: Anomaly or expected behaviour?
  • Previous by thread: Re: Why aren't nested groups? XML again.
  • Next by thread: Re: MLPutRealList vs. sequence of MLPutDouble