Re: Differential equations error with MathLink/JLink
- To: mathgroup at smc.vnet.net
- Subject: [mg27927] Re: Differential equations error with MathLink/JLink
- From: Ralph Gauges <ralph.gauges at eml.villa-bosch.de>
- Date: Sat, 24 Mar 2001 00:48:53 -0500 (EST)
- Organization: Tiscali / Nacamar
- References: <98vh54$8sr@smc.vnet.net> <99chhr$8bi@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi again,
I looked into this getFunction error a little more closely, but I still can not find out what
the problem seems to be.
Since it works in Java, there has to be a way to get it to work in python as well.
I added some print statement to the python wrapper around MLGetFunction. I think, the rest of
the code is not that important. So what basically happens is that python finds out that it
will get a RETURNPKT and that the MLGetNext wrapper finds out that the next thing will be a
function (MLTKFUNC=70="F"). Just to be sure, I call MLGetNext again right before
MLGetFunction is called (see below) and I still get MLTKFUNC as the return value. (See
output.) But then the actual MLGetFunction call just fails and returns this "MLGet out of
sequence" error. When I do the same thing in JLink (GetNext and then getFunction), it seems
to work.
Does anyone see, where the error in this function might be.
I can get around this by assembling the whole expression that solves a set of differential
equations and getting the result from that, but I would still be interested in finding out
why this does not work.
Thanks a lot
Ralph
static PyObject *
GetFunction(PyObject *self, PyObject *args)
{
long int len;
const char *Function;
PyObject *PyFunction;
long int x;
printf("Checking next again.\n");
x=MLGetNext(lp);
printf("%d\n",x);
printf("getting Function.\n");
MLGetFunction(lp, &Function, &len);
printf("Got %s %d\n",Function,len);
if (MLError( lp)) {
printf("Error occured.\n");
error( lp);
}
PyFunction = Py_BuildValue("si", Function, len);
MLDisownSymbol(lp, Function);
return PyFunction;
}
Testoutput for D[x[t],t]:
Next packet.
INPUTNAMEPKT
Getting string.
InputName: text= In[1]:=
Next packet.
RETURNPKT
Python GetNext.
Get next.
MLTKFUNC
NEXT is PYMLTKFUNC
Checking next again.
70
getting Function.
Got (null) 1
Error occured.
Error detected by MathLink: MLGet out of sequence.