Naja, bei so einer unkritischen Funktion fällt das gar nicht ins Gewicht. Da müsste man GetWinDir schon millionenmal aufrufen.
Noch effizienter wäre übrigens diese Implementierung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function GetWinDir: string; var Size: UINT; begin Size := GetWindowsDirectory(nil, 0); if Size > 0 then begin SetLength(Result, Size - 1); GetWindowsDirectory (PChar(Result), Size); end else Result := ''; end; |
Statt erstmal Speicher für MAX_PATH+1 Zeichen anzufordern und kurz darauf den Speicher auf die tatsächliche Länge zu korrigieren, wird Result direkt auf die tatsächliche Länge gesetzt, welche vorher mit "GetWindowsDirectory(nil, 0)" ermittelt wurde.
"SetLength(Result, Size - 1)" mag auf den ersten Blick vielleicht seltsam erscheinen, geht aber problemlos. Jedenfalls mit der gegenwärtigen Implementierung von Delphi-Strings, weil sie immer zusätzlich ein #0 Zeichen am Ende hängen haben.
