Also wenn du komplett sichergehen willst, nimmst du für String-Felder
ShortString
bzw.
array[0..n-1] of Char
. Hierbei ist es wichtig, dass die Größe statisch ist. Zum Zurückgeben eines Arrays mit dynamischer Anzahl von Elementen, kannst du dich an der Windows
API orientieren. Die handhabt sowas in folgender Form:
Delphi-Quellcode:
type
PRecord = ^TRecord;
TRecord = record
Field1: Integer;
Field2: array[0..255] of Char;
end;
function ReturnArrayOfRecords(Records: PRecord; Size: DWord; var NumberOfRecords: Integer): Boolean;
Auf der anderen Seite sieht das dann folgendermaßen aus:
Delphi-Quellcode:
var
Records: PRecord;
Size: DWord;
I, NumberOfRecords: Integer;
begin
// NumberOfRecords ermitteln
ReturnArrayOfRecords(nil, 0, NumberOfRecords);
Size := NumberOfRecords * SizeOf(TRecord);
GetMem(Records, Size);
try
// Daten ermitteln
if (ReturnArrayOfRecords(Records, Size, NumberOfRecords)) then
begin
for I := 0 to NumberOfRecords - 1 do
begin
// Arbeite mit Record #I
Inc(Records);
end;
end;
finally
FreeMem(Records);
end;
end;
Alternativ kannst du statt der Pointer hier auch ein dynamisches Array und
SetLength
verwenden.