- To: mathgroup at yoda.physics.unc.edu
- Subject: MathLink problems
- From: Rainer Staringer <rainer at fml.tuwien.ac.at>
- Date: Tue, 4 Aug 1992 12:11:49 +0200
I have a few questions regarding the MathLink protocol. I am working
on a NeXTstep application for risk evaluation of option portfolios,
which needs to interface with existing Mathematica routines to do
the more complicated calculations. The MathLink documentation I
have (a booklet with 'PRELIMINARY' somewhere on the cover, and a
smaller one which contains errata) didn't help me much because it is
apparently completely out of sync with the real MathLink library -
functions having different parameters, things working
differently than advertised in the docs, etc...
My first question is how to get the calculation parameters into
Mathematica: I could do this by passing everything as a normal
parameter to the appropriate routine; but this approach is very
inflexible because I need to hard-code the parameter passing into
the application, which makes it difficult to change the Mathematica
calculation models later on, and because it is error-prone (there
are a lot of different parameters, and the order would matter).
I imagined the best approach would be to write a simple C function
for each of the parameters, which can then be called as an external
function from Mathematica, whenever the value is needed.
Unfortunately this complicates matters a lot, because my NeXTstep
program is then both a 'front end' and an 'external package', having
to maintain two different connections. Is the MathLink library
smart enough to do this?
My program would do something like this during initialization:
start Mathematica subprocess using MLStart;
eval in Mathematica: link = LinkOpen;
get the socket address out of the return value;
connect to this socket using MLInit; /* Is this possible? How? */
eval in Mathematica: Install[link];
arrange matters so that my NeXTstep app periodically
checks if there are callbacks to be executed using MLReady (?),
and if yes calls MLMainStep (?) (parameters unclear in both cases).
Has anybody gotten something like this to work? It should be possible, if
the ML library were designed and implemented correctly, but it doesn't look
My second question: Why do you get tons of error messages if you try to
retrieve return values like they do in the sample programs? I.e.:
while (MLGetNextPacket (lp) != RETURNPKT)
This generates lots of:
Error: MLGetNextPacket called while current packet has unread data.
(or something like this). How do I tell ML that I am simply not
interested in the rest of the contents of the current packet?
Thanks in advance for any help. I'll summarize to the mailing list as
soon as I have a working solution.
Rainer Staringer | rainer at fml.tuwien.ac.at
Financial Markets Lab, TU Vienna | +43 (1) 58801/8138
Prev by Date:
Next by Date:
Previous by thread:
Next by thread: