Es wird ja kein Array benutzt. Die Länge des Strings (result) wird auf die maximal mögliche Länge eines Pfadnamens + 1 gesetzt (und damit der Speicher reserviert). Vereinfacht könnte man auch schreiben:
Delphi-Quellcode:
function GetWinDir: String;
var
Size: DWORD;
begin
Size := MAX_PATH + 1;
SetLength(Result, Size);
if GetWindowsDirectory(PChar(Result), Size) <> 0 then
SetLength(Result, Size) // kann meines Erachtens weg
else
Result := '';
end;
Dann wird mit PChar(Result) die Adresse des Strings (im Speicher) an die Funktion "GetWindowsDirectory" übergeben, damit die dort den Pfad hineinschreiben kann.
Und eigentlich müsste es auch so klappen:
Delphi-Quellcode:
function GetWinDir: String;
var Size: DWORD;
begin
Size := MAX_PATH + 1;
SetLength(Result, Size);
if GetWindowsDirectory(PChar(Result), Size) = 0 then
Result := '';
end;
Grüsse
...Doc