Forum: Win32/Win64 API (native code)
by Uwe Raabe,
20. Jan 2020
TDirectory.GetLogicalDrives gibt ein array of string zurück. Das kann problemlos mit einem for-in durchlaufen werden.
Interessanterweise benutzt die Implementierung von TDirectory.GetLogicalDrives ein StrEnd(CurrDrive) + 1 um auf den nächsten Eintrag zu positionieren. Das ist vermutlich etwas effizienter als mein Vorschlag mit dem Inc/Length.
Forum: Win32/Win64 API (native code)
by Uwe Raabe,
19. Jan 2020
Mal abgesehen davon, dass man damit den beobachteten Fehler nicht erklärt, halte ich 26 Aufrufe von GetLogicalDrives, die vermutlich jedes Mal dasselbe Ergebnis liefern, für optimierungsfähig.
Forum: Win32/Win64 API (native code)
by Uwe Raabe,
19. Jan 2020
Dein Code funktioniert nur dann, wenn Sizeof(Pointer) = 4 ist und auch nur wenn die Laufwerke drei Buchstaben haben (3 + 1 Null-Char). Das ist unter 64 Bit aber nicht der Fall.
So geht's:
vDrive := @vDrives;
while vDrive^ <> #0 do
begin
aList.Add(vDrive);
Inc(vDrive, Length(vDrive) + 1);
end;