A little C program calling MathLink
- To: mathgroup at smc.vnet.net
- Subject: [mg105165] A little C program calling MathLink
- From: 董理 <dongli2020 at gmail.com>
- Date: Mon, 23 Nov 2009 06:51:03 -0500 (EST)
Hi, all,
I am learning how to call MathLink in C program, and I wrote a little
one as following:
"
#include <stdio.h>
#include <string.h>
#include "mathlink.h"
int main(void)
{
MLINK link;
MLEnvironment env;
int packet;
int argc = 4;
char * argv[5] = {
"-linkname",
"math -mathlink",
"-linkmode",
"launch",
NULL
};
char user_msg[10];
const char * math_msg;
printf("What do you want to say to Mathematica? (10 characters only!)\n> ");
scanf("%s", user_msg);
/* setup connection with MathLink */
env = MLInitialize(NULL);
if(env == NULL) {
printf("MLInitialize: internal error\n");
return -1;
}
link = MLOpen(argc, argv);
if(link == NULL) {
printf("MLOpen: internal error\n");
return -1;
}
/* check validity of connection */
while(!MLReady(link)) continue;
if(MLConnect(link) == 0) {
printf("MathLink connection failed\n");
return -1;
}
/* sending packet to MathLink */
MLPutFunction(link, "EvaluatePacket", 1);
MLPutFunction(link, "Print", 1);
MLPutString(link, user_msg);
MLEndPacket(link);
/* receiving packets from MathLink */
while((packet = MLNextPacket(link)) && packet != RETURNPKT)
MLNewPacket(link);
if(!packet) {
printf("packets receiving error\n");
MLClearError(link);
} else {
if(!MLGetSymbol(link, &math_msg)) {
printf("MLGetSymbol: internal error\n");
return -1;
}
printf("Echo message from Mathematica:\n");
printf("%s\n", math_msg);
MLReleaseSymbol(link, math_msg);
}
/* disconnect with MathLink */
MLClose(link);
MLDeinitialize(env);
return 0;
}
"
the "math_msg" is NULL when it is printed. What's wrong with it? Thanks
for help? : )
Best regards,
DONG Li
- Follow-Ups:
- Re: A little C program calling MathLink
- From: 董理 <dongli2020@gmail.com>
- Re: A little C program calling MathLink