![]() |
AW: ScriptEngine II (v. 0.6)
Hi,
ich denke gerade darüber von RemObjects PascalScript auf deine ScriptEngine umzusteigen, aus dem einfachen Grund weil hier overloading unterstützt wird. Eines stört mich jedoch: Die Scripts müssen immer einen program-Header haben, in PascalScript konnte man den abschalten (über CompilerOptions). Kannst du das auch abschaltbar machen? Der verschwendet bei mir nur Platz, da ich ihn eh immer NPCScript oder so nennen würde und die Scripts über Dateinamen identifiziert werden. Edit: Und gibt es irgendwo Inc() und Dec()? Wenn nein, warum nicht? Edit 2: So, läuft ganz gut jetzt. Allerdings habe ich noch einen Feature-Wunsch: Meine Scripts terminieren die Runtime aus sich heraus und wenn ich direkt nach Abort() Finalize() und Free() aufrufe, knallt es. Daher brauche ich ein Notify-Event, irgendwie OnAborted oder so in der Runtime. Im finally ganz unten in TSE2ExecutionContext.Call dann so aufrufen:
Delphi-Quellcode:
if FDoAbort and Assigned(FOnAborted) then
FOnAborted(TObject(FExecutionData.RunTime)); |
AW: ScriptEngine II (v. 0.6)
Hallo WorstNightmare,
sorry für die späte Antwort, bin bisher nicht dazu gekommen Zitat:
Delphi-Quellcode:
function CompileScript(const Source: string): TSE2PE;
begin result := Compiler.Compile('program program1; ' + Source + ' begin end.'; end; Zitat:
Zitat:
|
AW: ScriptEngine II (v. 0.6)
Hi :)
Zitat:
IntVar.Inc; IntVar.Dec; Oder geht sowas nicht bei einfachen Variablen? Btw, schön zu hören das es bald Arrays gibt, obwohl man jetzt sowieso alles mit Listen machen würde (ich zumindest :) Btw2, ist es möglich / auf der Todo Liste, dass man Generics nutzen kann? Gruß Eugen |
AW: ScriptEngine II (v. 0.6)
Mein RTTI-ClassImporter fügt jetzt einfach noch nach der Klasse, mit der das Script aufs Hauptprogramm zugreift, Inc und Dec für Integer ein. Ich hatte einfach keine Lust das in allen 250 Scripts mit + bzw - 1 zu ersetzen.
Zum Abbrechen der Runtime: Das habe ich dann auch schnell festgestellt^^ Deswegen möchte ich ja, dass wenn ich Abort aufrufe, ich benachrichtigt werde wenn es fertig mit Abbrechen ist und dann Free aufrufen kann. Eine andere Möglichkeit habe ich nicht, denn das Hauptprogramm weiß nicht automatisch, wann das Script fertig ist (die Teile haben eine Methode, die bei jedem Script unterschiedlich oft aufgerufen wird). |
AW: ScriptEngine II (v. 0.6)
Alle meine Scripts laufen jetzt schon seit längerer Zeit mit dieser Engine und ich muss sagen, ich bin sehr zufrieden.
Es gibt allerdings ein mittelschweres Problem: Der Speicherverbrauch. Für ein simples Script wie dieses ![]() Ich bin nicht ganz sicher warum für ein 600 Byte langes Script plötzlich 4,5 MB verbraucht werden, könnte es mit der verwendeten Unit zusammenhängen? Diese setzt sich aus den Klassen TEventInstance und TEventManager aus dieser ![]() ![]() |
AW: ScriptEngine II (v. 0.6)
Es gibt mehrere Caching-Systeme in der Script-Engine, die ich kurz erläutern will.
Wegen dem Implementierungsfortschritt: die Arrays sind soweit drinnen und funktionieren auch fast ohne Probleme (gibt noch ein paar Baustellen). Jedoch habe ich im Moment wenig Zeit, wodurch sich der Release leider etwas verzögert. Vielleicht bringe ich zur Überbrückung auch noch ein Zwischen-Release heraus, in der die Arrays noch deaktiviert sind, da ich doch noch ein paar kleine Fehler entdeckt habe. Gruß David |
AW: ScriptEngine II (v. 0.6)
Hallo an Alle. Zuerst muss ich sagen: SUPER Sache!!! Und grooooßßßßesss Lob an David!!!! 8-)
So ein SciptEngine ist gerade das was ich schon lange gesucht habe. Ich habe aber eine Frage diesbezüglich: Im wesentlichen brauche ich nur ein Zugriff vom Hauptprogramm auf die Script-Funktionen. Frage 1): Gibt es ein allgemeiner Aufruf einer Funktion? (ohne Benutzung von TSE2RunAccess.FindMethod ?) Bei mir ist es der Fall dass die Funktionen im Script vom Anwender Definiert werden und ich diese dann zur Laufzeit aufrufen will. Frage 2): Kann man auf Funktionen mit den Arrays für solche zwecke verwenden? Ich habe eigentlich in den ParamTypes kein Array gefunden. Ich hoffe ihr könnt mir Helfen. Danke im Voraus, Denis. |
AW: ScriptEngine II (v. 0.6.1)
Neue Version :arrow: Version 0.6.1
Vor längerer Zeit habe ich ja eine neue Version angekündigt. Nun ist es soweit - wobei ich gleich sagen muss: arrays sind immer noch nicht fertig eingebaut. Somit ist das hier eher ein Bug-Fix-Release sowie eine experimentelle Version für arrays. Es ist noch nicht alles drinnen aber ich habe Arrays jetzt erstmal nicht deaktiviert. Falls also wer die Arrays mal ausprobieren will, es geht noch nicht alles. Zudem gibt es folgende wichtige Einschränkung: man kann arrays nicht "inline" deklarieren, also folgendes geht NOCH NICHT:
Delphi-Quellcode:
. Stattdessen muss man immer vorher den Array-Typ deklarieren:
var t: array of integer;
Delphi-Quellcode:
.
type TIntArray = array of integer;
Download-Link ist im ersten Post. Grüße |
AW: ScriptEngine II (v. 0.6.1)
Morgen David,
ich möchte mich in deine ScriptEngine einarbeiten, dabei plane ich Funktionen zu schreiben, welchen ich die Parameter als Array (
Delphi-Quellcode:
) übergeben möchte.
type TMyRecordList = array of TMyRecord;
Folgenden Aufruf hatte ich daher von Seite der Delphi-Anwendung gedacht:
Delphi-Quellcode:
Method := RunTime.CodeAccess.FindMethod('get_Test', 'Records', [pmIn, pmResult], [btArray,btDouble]);
if Method <> nil then ShowMessage(FloatToStr(RunTime.Call(Method, [MyRecordList]))); In der ScriptEngine sieht die Definition wie folgt aus:
Delphi-Quellcode:
Die unit Records habe ich sowohl für Delphi und der ScriptEngine geschrieben. Da du ja bei den Arrays noch in der Entwicklung bist, interessiert mich, ob ich etwas falsch verstanden habe oder ob mein Weg so noch nicht möglich ist?
type TMyRecordList = array of TMyRecordList;
implementation function get_Test(MyRecordList: TMyRecordList): double; export; begin result:= MyRecordList[0].dbl_Betrag * 3.5; end; LG Dirk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz