Mathematica normally assumes that variables which appear in equations can stand for arbitrary complex numbers. But when you use Reduce, you can explicitly tell Mathematica ...
int MLEvaluate (MLINK link, char*string) sends a string of input suitable for use with ToExpression[] to Mathematica for evaluation.
int MLPutMessage (MLINK link, int msg) sends the message msg to the link object link.
int MLPutMessageWithArg (MLINK link, int msg, int arg) sends the message msg and its argument arg to the link object link.
int MLSetEnvIDString (MLENV env, const char *eid) sets the MathLink environment identification string to eid.
void * MLUserData (MLINK link, MLUserFunction *fp) returns the data object and function pointer installed by MLSetUserData().
mlextended_double is a MathLink type representing an extended-precision floating-point number.
int MLPutRealList (MLINK link, double *a, long n) puts a list of n floating-point numbers starting from location a to the MathLink connection specified by link.
stdenv
(Mathematica MathLink C Function) MLENV stdenv is a variable representing the standard MathLink environment in a program built from MathLink templates with mprep or mcc.
stdlink
(Mathematica MathLink C Function) MLINK stdlink is a variable representing the standard link that connects a program built from MathLink templates to Mathematica.