unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, PaxCompiler; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } arr_x, arr_y: array[1..3] of Double; h_norm, h_x, h_y: Integer; buff: array[1..4096] of Byte; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function Norm(x, y: Double): Double; begin result := Sqrt(x * x + y * y); end; procedure TForm1.Button1Click(Sender: TObject); var PaxCompiler1: TPaxCompiler; PaxPascalLanguage1: TPaxPascalLanguage; PaxProgram1: TPaxProgram; I: Integer; begin PaxCompiler1 := TPaxCompiler.Create(nil); PaxPascalLanguage1 := TPaxPascalLanguage.Create(nil); PaxProgram1 := TPaxProgram.Create(nil); try PaxCompiler1.Reset; PaxCompiler1.RegisterLanguage(PaxPascalLanguage1); h_norm := PaxCompiler1.RegisterRoutine(0, 'Norm', _typeDOUBLE, _ccREGISTER); PaxCompiler1.RegisterParameter(h_norm, _typeDOUBLE, Unassigned); PaxCompiler1.RegisterParameter(h_norm, _typeDOUBLE, Unassigned); h_x := PaxCompiler1.RegisterVariable(0, 'x', _typeDOUBLE); h_y := PaxCompiler1.RegisterVariable(0, 'y', _typeDOUBLE); if PaxCompiler1.CompileExpression('Norm(x, y)', PaxProgram1) then begin PaxProgram1.SaveToBuff(buff); ShowMessage('Compiled expression has been created!'); end else for I:=0 to PaxCompiler1.ErrorCount - 1 do ShowMessage(PaxCompiler1.ErrorMessage[I]); finally PaxCompiler1.Free; PaxPascalLanguage1.Free; PaxProgram1.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var PaxProgram1: TPaxProgram; ResValue: Double; I: Integer; begin {$O-} if h_x <> 0 then begin PaxProgram1 := TPaxProgram.Create(nil); try PaxProgram1.LoadFromBuff(buff); PaxProgram1.SetAddress(h_norm, @norm); for I:=1 to 3 do begin PaxProgram1.SetAddress(h_x, @arr_x[I]); PaxProgram1.SetAddress(h_y, @arr_y[I]); PaxProgram1.Run; ResValue := Double(PaxProgram1.ResultPtr^); ShowMessage(FloatToStr(ResValue)); end; finally PaxProgram1.Free; end; end else ShowMessage('Press the first button to create compiled script.'); end; procedure TForm1.FormCreate(Sender: TObject); begin h_x := 0; h_y := 0; h_norm := 0; arr_x[1] := 4.2; arr_y[1] := -5.2; arr_x[2] := -0.4; arr_y[2] := 3.2; arr_x[3] := 2.0; arr_y[3] := 3; end; end.