Wenn P^ #0 wäre, wäre die Schleife bereits verlassen worden.
Es muss +1 addiert werden, um auf den Beginn des folgenden (Teil)Strings zu kommen. Am Ende des Gesamtstrings ist sowieso ein Doppelnullbyte. Grundsätzlich ist der Code schon richtig. Addiert man die +1 nicht, bricht die Schleife nach dem ersten Laufwerk ab (weil der Pointer auf dem Nullbyte nach dem ersten Laufwerk steht).
Ich hab sogar eine ähnliche Variante aus einem anderen Projekt probiert:
Delphi-Quellcode:
procedure SplitMultiSZToStringList(AStr: PChar; const sl: TStringList);
begin
if Assigned(AStr) then begin
sl.Clear;
while AStr[0] <> #0 do begin
if AStr <> '' then
sl.Add(AStr);
Inc(AStr, StrLen(AStr) + 1)
end;
end;
end;
Aber auch das ändert nichts.
Interessant auch: Nutzt man die
ANSI-Funktion
GetLogicalDriveStringsA und passt die Variablentypen entsprechend an, knallt es auch nicht mehr. Verstehe das, wer will.
Grüße
Dalai