unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, PaxCompiler, PaxProgram; type TForm1 = class(TForm) PaxCompiler1: TPaxCompiler; PaxPascalLanguage1: TPaxPascalLanguage; PaxProgram1: TPaxProgram; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var H_X: Integer; P: Pointer; I: Integer; begin {$O-} PaxCompiler1.Reset; PaxCompiler1.RegisterLanguage(PaxPascalLanguage1); PaxCompiler1.RegisterHeader(0, 'procedure ShowMessage(const Msg: string);', @ShowMessage); PaxCompiler1.RegisterHeader(0, 'function IntToStr(Value: Integer): string;', @IntToStr); PaxCompiler1.AddModule('1', PaxPascalLanguage1.LanguageName); PaxCompiler1.AddCode('1', 'var x: Integer = 5;'); PaxCompiler1.AddCode('1', 'begin'); PaxCompiler1.AddCode('1', ' ShowMessage(''script:'' + IntToStr(x));'); PaxCompiler1.AddCode('1', 'end.'); if PaxCompiler1.Compile(PaxProgram1) then begin H_X := PaxCompiler1.GetHandle(0, 'x', true); PaxProgram1.Run; // the first run if H_X <> 0 then begin P := PaxProgram1.GetAddress(H_X); ShowMessage('host:' + IntToStr(Integer(P^))); // show script-defined var end; Integer(P^) := 30; // change script-defind variable PaxProgram1.Run; // the second run end else for I:=0 to PaxCompiler1.ErrorCount do ShowMessage(PaxCompiler1.ErrorMessage[I]); end; end.