Typen müssen nunmal identisch sein.
Delphi-Quellcode:
type
TRecordArray = Array of TRecord; // geht natürlich nicht, da TRecord noch nicht deklariert ist und Forward-Deklarationen bei arrays nicht möglich sind (Größe/SizeOf muß vorhanden sein)
TRecord = record
// .. Daten
RecordArray: TRecordArray;
end;
Deine Definitionen sind zwar "intern gleich", aber nicht "identisch".
Jemand mit der selben DNA (Bauplan) wie du, ist ja dennoch nicht du.
Der Cast sollte kein Problem sein, da die Typen ja intern gleich, aber eben nicht der "selbe" Typ sind.
Sowas geht vermutlich auch nicht?
Delphi-Quellcode:
type
TRecord = record
public type
TRecordArray = Array of TRecord;
public
// .. Daten
RecordArray: TRecordArray;
end;
procedure Irgendwas(var ARecords: TRecord.TRecordArray);
Am Sichersten wären hier wohl Pointertypen oder Objekte, welche als Forward deklariert werden können.
Oder du übergibst deinem Irgendwas nicht das Array, sondern den übergeordneten Record.
Funktioniert auch, aber von der Typsicherheit her ein Graus, da man ja "alles" übergeben kann.
Delphi-Quellcode:
procedure Irgendwas(var ARecords);
begin
SetLength(TRecordArray(ARecords), 123);
// Array wird gefüllt
end;
procedure Irgendwas(var ARecords);
var
TheRecords: TRecordArray absolute ARecords;
begin
SetLength(TheRecords, 123);
// Array wird gefüllt
end;