Hi,
Firstly, i hope everyone is doing well. Be safe and thanks to all people still working despite pandemic.
I am working on your Scripter engine and need your help.
I want to register a new Type into Scripter. I have a USER and an ARRAYOF_USER:
TMy_User = class
private
fFirstName: String;
fLastName: String;
fGender: String;
fAge: Integer;
public
property FirstName: String read fFirstName;
property LastName: String read fLastName;
property Gender: String read fGender;
property Age: String read fAge;
end;
TArrayOf_My_User = array of TMy_User;
also have another class to call a function for getting TArrayOf_My_User as:
class function GetUserList(const SomeParams: String): TArrayOf_My_User;
I made an another library to define them for Scripter;
procedure TMyScriptterLib.__VM_GetUserList(aMachine: TatVirtualMachine);
var aResult : TArrayOf_My_User;
begin
with AMachine do
begin
aResult := TMyApi.GetUserList(GetInputArgAsString(0));
ReturnOutputArg(aResult);
end;
end;
procedure TMyScriptterLib.Init;
begin
with Scripter.DefineClass(TMy_User) do
begin
DefineProp('FirstName', atScript.tkString, TMyScriptterLib.__VM_My_User_Get_FirstName, nil, nil, False, 0);
DefineProp('LastName', atScript.tkString, TMyScriptterLib.__VM_My_User_Get_LastName, nil, nil, False, 0);
DefineProp('Gender', atScript.tkString, TMyScriptterLib.__VM_My_User_Get_Gender, nil, nil, False, 0);
DefineProp('Age', atScript.tkInteger, TMyScriptterLib.__VM_My_User_Get_Age, nil, nil, False, 0);
end;
Scripter.DefineMethod('GetUserList', 1, atScript.tkVariant, nil, TMyScriptterLib.__VM_GetUserList, False);
Scripter.DefineRecord(TypeInfo(TArrayOf_My_User), 'TArrayOf_My_User');
end;
I can use TMy_User from Scripter but when i call GetUserList and tried to get an array, scripter returns an integer value which i can't use. Sample:
procedure ScriptterForm1_Button3_OnClick(Sender : TObject);
var sResult : String;
i : Integer;
aUsers : TArrayOf_My_User;
aUser : TMy_User;
begin
aUsers := GetUserList(ScriptterForm1.MaskEdit3.Text);
if Assigned(aUsers) then
begin
for i := 0 to High(aUsers) do /// Crash HERE -- ShowMessage(aUsers) -> Returns: 354471371 some Pointer Adress
begin
aUser := aUsers;
aResult := aResult + Chr(13) + Chr(10) + Format('%d: %s - %s - %d', [i, aUser.FirstName, aUser.LastName, aUser.Age]);
end;
end
end;
Where am i doing wrong?