Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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