I have a compiled program with MathLink.
I want to use it from other C program, without Mathematica being involved at all.
If i create my program with MathLink and connect to this external program, than i get number packets with number of functions:
DefineExternal ["funcname[]" , "{ }" , 89 ]
that registers these functions as external in Mathematica.
How could i, from my C programm, call analog of Mathematica CallPacket[89,{}]
function to call "funcname".
Sending directly MLPutFunction(lp, "funcname")
to this external application does not seems to be working, as, i suppose, it is intended to be used only for communication from external program with Mathematica, or?
1 Answer
Thank you very much Oleksandr, it works. There should be empty List even when no arguments.
MLPutFunction(lp, "CallPacket", 2);
MLPutInteger(lp, 89);
MLPutFunction(lp, "List", 0);
MLEndPacket(lp);
MLGetReal(lp, &dp); //return value
MLPutFunction(lp, "funcname")
--functions must be called by ordinal as MathLink programs don't have access to the Mathematica interpreter. Instead useMLPutFunction(lp, "CallPacket", nargs+1); MLPutInteger(lp, ord); /* put any arguments on the link here */ MLEndPacket(lp);
. See the book MathLink: Network Programming with Mathematica by Chikara Miyaji and Paul Abbott for more information. $\endgroup$List
, not given as a sequence. (That's why this is just a comment: no time to give a properly debugged answer now. I'm sure you'll be able to figure it out for yourself--and when you get a working solution, feel free to self-answer.) $\endgroup$