unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, BASE_PARSER, PaxScripter, PaxPascal; type TMyClass = class(TPersistent) private f: String; public constructor Create(const s: String); published property P: String read f write f; end; TDynaArrInt = array of Integer; TDynaArrMyClass = array of TMyClass; TForm1 = class(TForm) PaxScripter1: TPaxScripter; PaxPascal1: TPaxPascal; Button1: TButton; procedure Button1Click(Sender: TObject); procedure PaxScripter1AssignScript(Sender: TPaxScripter); procedure FormCreate(Sender: TObject); private { Private declarations } A: TDynaArrInt; B: TDynaArrMyClass; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin PaxScripter1.Run; ShowMessage(IntToStr(A[3])); ShowMessage(B[2].P); ShowMessage(B[3].P); end; procedure TForm1.PaxScripter1AssignScript(Sender: TPaxScripter); begin PaxScripter1.AddModule('1', 'paxPascal'); PaxScripter1.AddCode('1', 'var x, y: TDynaArrInt;'); PaxScripter1.AddCode('1', 'var z: array of Integer;'); PaxScripter1.AddCode('1', 'print B[2].P;'); PaxScripter1.AddCode('1', 'B[2].P := "pqr";'); PaxScripter1.AddCode('1', 'B[3] := TMyClass.Create("xyz");'); PaxScripter1.AddCode('1', 'SetLength(z, 5);'); PaxScripter1.AddCode('1', 'z[3] := 5;'); PaxScripter1.AddCode('1', 'print z[3];'); PaxScripter1.AddCode('1', 'SetLength(x, 10);'); PaxScripter1.AddCode('1', 'x[5] := 8;'); PaxScripter1.AddCode('1', 'y := Test(x);'); PaxScripter1.AddCode('1', 'print y[2];'); PaxScripter1.AddCode('1', 'print x[5];'); PaxScripter1.AddCode('1', 'print Length(x);'); PaxScripter1.AddCode('1', 'print A[3];'); PaxScripter1.AddCode('1', 'A[3] := 88;'); end; function Test(P: TDynaArrInt): TDynaArrInt; begin ShowMessage(IntToStr(P[5])); SetLength(result, 20); result[2] := 123; end; procedure TForm1.FormCreate(Sender: TObject); begin SetLength(A, 15); A[3] := 77; SetLength(B, 15); B[2] := TMyClass.Create('abc'); PaxScripter1.RegisterVariable('A', 'TDynaArrInt', @A); PaxScripter1.RegisterVariable('B', 'TDynaArrMyClass', @B); end; constructor TMyClass.Create(const s: String); begin f := s; end; initialization RegisterClassType(TMyClass); RegisterMethod(TMyClass, 'constructor Create(const s: String);', @TMyClass.Create); RegisterDynamicArrayType('TDynaArrInt', 'Integer'); RegisterDynamicArrayType('TDynaArrMyClass', 'TMyClass'); RegisterRoutine('function Test(P: TDynaArrInt): TDynaArrInt;', @Test); end.