Wenn eine Prozedur/Funktion/Methode ein Array zurückliefern soll, muss es als 'Var' deklariert sein, und nicht nur eventuell, sondern garantiert.
'Var' bedeutet, das Änderungen am Parameter dem Aufrufer nicht verborgen bleiben. Ohne das 'Var' wird vor dem Aufruf eine Kopie angelegt. Die aufgerufene Methode pfuscht dann in der Kopie herum. Nach Beendigung der Methode sind alle Änderungen futsch.
Um nun Arrays als Rückgabeparameter zu deklarieren, gibt es zwei Möglichkeiten: Entweder man vereinbart einen Datentypen (a) oder man verwendet offene Arrays (b).
Möglichkeit a:
Delphi-Quellcode:
Type
TMyArray = Array [0..9] Of TSomething;
...
Procedure MyProcedure (Var aMyArray : TMyArray);
Begin
...
End;
...
Var
a : TMyArray;
Begin
MyProcedure (a);
End;
oder b:
Delphi-Quellcode:
Procedure MyProcedue (Var aMyArray : Array Of TSomething);
Begin
...
End;
...
Var
a : Array [0..4] Of TSomething;
b : Array [0..999] Of TSomething;
Begin
MyProcedure (a);
MyProcedure (b);
End;
Natürlich geht auch c:
Delphi-Quellcode:
Type
TMyArray = Array [0..9] Of TSomething;
...
Function MyFunction : TMyArray;
Begin
Result[0] := Foobar;
End;
...
Var
a : TMyArray;
Begin
a := MyFunction;
End;
Variante c ist kein Standard-Pascal aber legitim. Ich finde häßlich, aber das ist Geschmackssache.