2013-02-07 12 views
5

Meine Delphi-Anwendung führt Skripte mit JvInterpreter (aus dem Jedi-Projekt).Laufzeitauswertung von Werten in DelphiWebScript

Eine Funktion, die ich verwende, ist Laufzeitauswertung von Ausdrücken.
Script Beispiel:

[...] 
ShowMessage(X_SomeName); 
[...] 

JvInterpreter nicht weiß X_SomeName. Wenn der Wert von X_SomeName erforderlich ist, ruft der Scripter seinen OnGetValue-Callback auf. Dies zeigt auf eine Funktion, die ich behandeln. Dort suche ich den Wert von X_SomeName und gebe ihn zurück. Dann ruft JvInterpreter ShowMessage mit dem von mir angegebenen Wert auf.

Jetzt erwäge ich, zu DelphiWebScript zu wechseln, da es eine korrekte Debug-Schnittstelle hat und auch schneller als JvInterpreter sein sollte.

Problem: Ich habe keine offensichtliche Möglichkeit gefunden, zu implementieren, was JvInterpreter mit seinen OnGetValue/OnSetValue-Funktionen tut.

X_SomeName sollte berücksichtigt werden (und ist eigentlich die meiste Zeit) eine Variable, die von der Host-Anwendung behandelt wird.

Irgendwelche Ideen?

Danke!

+0

Haben Sie darüber nachgedacht, diese Variable zu einer Funktion zu machen, die Ihre Anwendung aufruft? Sicher verlieren Sie das "Set" Verhalten, aber mindestens die Hälfte des Jobs ist erledigt. – Nedko

+0

Ich habe - würde aber nicht funktionieren. Das "SomeName" -Part von X_SomeName kann alles sein, also kann ich es nicht vorne deklarieren. Deshalb brauche ich Laufzeitauswertung. –

Antwort

1

Sie können dies über den Spracherweiterungsmechanismus tun, der über eine FindUnknownName-Methode verfügt, mit der Symbole vor Ort registriert werden können.

Es wird in der Demo-Version von asm lib verwendet, und Sie können auch den neuen Testfall "AutoExternalValues" in ULanguageExtensionTests überprüfen, der näher an Ihren Anforderungen liegen sollte.

+0

Die Dokumentation ist schrecklich, daher brauchte ich eine Weile, um herauszufinden, wie man es benutzt, aber genau das habe ich gesucht. Vielen Dank! –