Freigeben über


_Evaluate( ), API-Bibliotheksroutine

Kompiliert einen mit expr angegebenen Visual FoxPro-Ausdruck und führt ihn aus. Das Ergebnis wird in res platziert.

int _Evaluate(Value FAR *res, char FAR *expr)
Value FAR *res;            /* Address for result. */
char FAR *expr;            /* Expression. */

Hinweise

Sie können einen beliebigen Ausdruck angeben, der mit der Visual FoxPro-Funktion EVALUATE( ) ausgewertet werden kann. Nach dem Auswerten des Ausdrucks wird die Steuerung normalerweise an die C-Anweisung zurückgegeben, die unmittelbar auf den Aufruf von _Evaluate( ) folgt. Davon ausgenommen ist das Auswerten eines Visual FoxPro-Ausdrucks, der die Visual FoxPro-Befehle CANCEL oder QUIT ausführt.

_Evaluate( ) gibt die interne Visual FoxPro-Fehlernummer für alle Fehler zurück, die während des Auswertens des Visual FoxPro-Ausdrucks auftreten. Wenn keine Fehler auftreten, wird 0 zurückgegeben. Der Inhalt von res ist nur dann gültig, wenn _Evaluate( ) den Wert 0 zurückgibt.

Anmerkung   Rufen Sie _Evaluate( ) nicht aus einer Ereignisbehandlungsroutine auf.

Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.

Beispiel

Das folgende Beispiel hat die gleiche Funktionalität wie die Visual FoxPro-Funktion EVALUATE( ).

Visual FoxPro-Code

SET LIBRARY TO EVALUATE
? XEVAL("2 + 3")
? XEVAL("'a' + 'b'")
? XEVAL("SIN(PI()/2))")

C-Code

#include <pro_ext.h>

FAR EvaluateEx(ParamBlk FAR *parm)
{
   char FAR *expr;
   Value result;

//   Null terminate character string
   if (!_SetHandSize(parm->p[0].val.ev_handle, 
      parm->p[0].val.ev_length + 1))
   {
      _Error(182); // "Insufficient memory"
   }
   _HLock(parm->p[0].val.ev_handle);
   expr = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);
   expr[parm->p[0].val.ev_length] = '\0';

   _Evaluate(&result, expr);
   _RetVal(&result);

   _HUnLock(parm->p[0].val.ev_handle);
}

FoxInfo myFoxInfo[] = {
   {"XEVAL", (FPFI) EvaluateEx, 1, "C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_Execute( ), API-Bibliotheksroutine | CANCEL-Befehl | QUIT-Befehl | Zugreifen auf die Visual FoxPro-API