Weiters würde ich dir wärmstens davon abraten, jedesmal in der Funktion Speicher für das dynamische Array zu allozieren (SetLength(); was eig. eh dann, sobald es außer Scope fällt (Funktionsende), dealloziert wird).
Lös das bitte anders!
Wie würdest du das lösen? Den Speicher außerhalb der Funktion allozieren?
Edit: Ich seh grad, dass du auch ein Kopiervorgang drinnen hast (Result := String(Buffer))
Ist
imho auch unnötig und sehr ineffizient.
Ich brauche ja das Funktionsergebnis als string. Wie soll man sonst einen string als Funktionsergebnis erhalten?