
Zitat von
mimi:
So, wie versprochen habe ich es versucht unter Lazarus zum laufen zu bringen, was leider nicht geht,
weil die LCL anscheind kein CopyMemory kennt.
Ich habe es unter Linux versucht.
Was genau macht diese Methode ? kann man die auch noch anders Schreiben ?
weil MoveMemory wird auch nicht gefunden.
SygScript_Runtime_unit
in dieser
Unit traten die Fehler auf.
Es währe außerdem noch schön, wenn du von vornerein die Windows
unit nur mit Komplier schalter einbinden könntest.
die musste ich in allen Units rauß nehmen.
Ich werd mir in absehbarer Zeit mal Lazarus installieren und versuchen, das Problem zu beheben.

Zitat von
mimi:
Evlt. gibt es ja noch eine andere Lösung für das Problem, ich habe ein neues Projekt angefangen, und mir ein Beispiel von dir angeschaut und folgende
unit hinzugefügt:
Delphi-Quellcode:
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
SygScript_Constants_unit, SygScript_Parser_unit, SygScript_Runtime_unit;
;
brauche ich wirklich alle ?
Also anhand der
Unit-Namen merk ich schon, dass du noch ein altes
Package hast. In der neusten Version heißen die Unitnamen anders (würde dann so aussehen: uSygConstants, uSygParser, uSygRunTime).
Also wenn du nur kompilieren willst, brauchst du nur die uSygParser. Fürs Ausführen brauchst du nur die uSygRunTime. Wenn du dann noch die bereits konvertierten Units auch zur Verfügung stellen willst, musst du die auch noch einbinden.
Hier ist mal das einfachste Beispiel:
Delphi-Quellcode:
uses
uSygParser, // für TSygScript_Parser
uSygRunTime; // für TSygScript_RunTime
var Compiler : TSygScript_Parser; // das Objekt muss natürlich vorher erstellt werden
Executor : TSygScript_RunTime; // ... und das Objekt sollte auch vorher erstellt werden
function CompileAndExecute(ScriptSource: string): boolean;
begin
// Ergebniss vorinitalisieren
result := False;
// Script kompilieren
if Compiler.ParseScript(ScriptSource) then
begin
// ByteCode im Executor speichern
Executor.FillData(Compiler.OutputData);
// Script ausführen
Executor.Run;
result := True;
end;
end;