LlExprParse

Syntax:

LPVOID LlExprParse(HLLJOB hJob, LPCTSTR lpExprText, BOOL bTableFields);

Aufgabe:

Testet den Ausdruck auf Korrektheit und erstellt eine interne Datenstruktur für diesen Ausdruck.

Parameter:

hJob: List & Label-Job-Handle

lpExprText: Ausdruck

bTableFields: TRUE: Bezug auf Felder (und Variablen), FALSE: Bezug nur auf Variablen

Rückgabewert:

Zeiger auf List & Label interne Datenstruktur

Hinweise:

Wenn ein Fehler zurückgemeldet wird (Adresse = NULL), kann man über LlExpr­Error() die Fehlerbeschreibung abgefragt werden.

Die über LlDefineVariable() definierten Variablen können mit in den Ausdruck eingebaut werden, wenn bTableFields auf FALSE ist, ansonsten werden die über LlDefineField() definierten Felder in den Ausdruck mit einbezogen.

Wenn der Ausdruck mehrmals benötigt wird, empfiehlt es sich, diesen einmal über LlExprParse() übersetzen zu lassen und dann die Berechnungen durchzuführen und erst am Schluss den Baum wieder freizugeben.

Wenn beim Aufruf dieser Funktionen ein Fehler im Ausdruck erkannt wird, wird der entsprechende Fehler-Callback LL_NTFY_EXPRERROR aufgerufen.

Beispiel:

LPVOID lpExpr;
char     lpszErrortext[128];
char     lpszBuf[20];
long     lDateOne;
long     lDateTwo;

LlDefineVariable(hJob, "Datum", "29.2.1964", LL_­TEXT);
lpExpr = LlExprParse(hJob, "DateToJulian(DATE(Datum))", FALSE);

if (lpExpr)
{
   if (LlExprType(hJob, lpExpr) != LL_­EXPRTYPE_­DOUBLE)
   {
      // da stimmt was nicht, muss numerisch sein!
   }
   LlExprEvaluate(hJob, lpExpr, lpszBuf, sizeof(lpszBuf));
   lDateOne = atol(lpszBuf);
   // lDateOne hat nun das julianische Datum vom 29.2.1964
   LlDefineVariable(hJob, "Datum", "28.10.2017", LL_­TEXT);
   LlExprEvaluate(hJob, lpExpr, lpszBuf, sizeof(lpszBuf));
   lDateTwo = atol(lpszBuf);
   // lDateTwo hat nun das julianische Datum vom 28.10.2017
   LlExprFree(hJob, LpExpr);
}
else
{
   // Fehler!
   LlExprError(hJob, lpszErrortext, sizeof(lpszErrortext));
}

Siehe auch:

LlExprEvaluate, LlExprType, LlExprError, LlExprFree