I have the following code which is working, but I don't understand it 100% (please see the comments from code):
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMyRec=record a:Integer; b:String; end; TRecArray=array of TMyRec; PRecArray = ^TRecArray; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public v1:TRecArray; procedure Test(a:PRecArray); { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin SetLength(v1,3); v1[0].b:='test1';//set the first value Test(PRecArray(v1));//call method to change the value assigned before end; procedure TForm1.Test(a: PRecArray); begin ShowMessage(v1[0].b);//shows test1 try a^[0].b:='test2' //this is raising an error... except end; PRecArray(@a)^[0].b:='test3';//this is working... ShowMessage(v1[0].b);//shows test3 end; end. I don't understand why 'a^[0].b:='test2' is raising an error.
Thank you!
PArrayRec = ^TArrayRec, instead ofTPointerArryRec. I would personally call themTRecArrayandPRecArray, i.e. Array at the end. I see @iamjoosy had the same idea at almost the same time.