Наиболее удобным для нас способом является передача выражений на внутреннем языке пакета Mathematica в виде текстовых строк:
char *expr;
expr = “Solve[x^3 + a x + b == 0, x]”;
MLPutFunction(MathLink, "EvaluatePacket", 1);
MLPutFunction(MathLink, "ToString", 1);
MLPutFunction(MathLink, "ToExpression", 1);
MLPutString (MathLink, expr);
MLEndPacket(MathLink);
Переданные ядру данные будут обработаны. Результатом обработки станут те или иные пакеты (с результатами, либо кодами ошибок), которые программа должна правильно интерпретировать. Для работы с пакетами, посылаемыми ядром необходимо создать цикл обработки полученных пакетов. Об окончании сеанса свидетельствует получение пакета ReturnPacket, при получении которого необходимо вызвать функцию, обрабатывающую результат – MLGetString:
while (MLNextPacket(MathLink)!=RETURNPKT) MLNewPacket(MathLink);
MLGetString(MathLink, &Result);
Финальной стадией является разрыв установленного соединения вызовом функции MLClose и завершение работы с расчетным ядром при помощи функции MLDeinitialize:
MLClose(MathLink);
MLDeinitialize(env);