12
$\begingroup$

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?

$\endgroup$
  • $\begingroup$ Now that is an absolutely fascinating question. $\endgroup$ – rcollyer Aug 15 '12 at 0:58
  • 2
    $\begingroup$ I must admit I was very unclear as to the meaning of your question until I saw your comment on the corresponding question on SO. Anyway, you cannot use MLPutFunction(lp, "funcname")--functions must be called by ordinal as MathLink programs don't have access to the Mathematica interpreter. Instead use MLPutFunction(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$ – Oleksandr R. Aug 15 '12 at 9:52
  • 2
    $\begingroup$ Sorry--the arguments should be in a 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$ – Oleksandr R. Aug 15 '12 at 10:16
6
$\begingroup$

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
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.