Bei mir ist das Ergebnis sogar 260 Zeichen "lang". Aber das liegt einfach nur daran, dass vergessen wurde, dass "uSize" (der zweite Parameter der Funktion "GetWindowsDirectory") ein IN-Parameter ist. Deswegen passiert bei der Zeile
Quelltext
1: 2:
| if GetWindowsDirectory(PChar(Result), Size) <> 0 then SetLength(Result, Size - 1) |
nicht das, was man erwarten würde - nämlich, dass der String gekürzt wird.
Die Anzahl der kopierten Zeichen wird von der Funktion selbst als Ergebnis zurückgegeben. Der Wert von "uSize" ändert sich IMO nicht. Eine einfachere Version könnte daher so aussehen:
Quelltext
1: 2: 3: 4: 5:
| function AnotherTryToGetTheWinDir: string; begin SetLength(Result,MAX_PATH+1); SetLength(Result,GetWindowsDirectory(@Result[1],MAX_PATH+1)); end; |
In diesem Fall ist das Ergebnis bei mir 10 ("c:\windows"). Die Frage wäre nun natürlich: kann man diese Funktion so nutzen? Im Normalfall gehöre ich ja auch zu denen, die lieber eine Absicherung zuviel als zuwenig setzen.