Mir ist es nie in den sinn gekommen, diese Funktion mit einem 64bit-Kompilat zu testen.
Heute habe ich es aber mal gemacht und siehe da, es werden nicht alle Laufwerke erkannt.
Woran liegt das?
Delphi-Quellcode:
procedure GetDiskDriveLetters(aList: TStringList);
var
vDrivesSize: Cardinal;
vDrives:
array [0 .. 128]
of Char;
vDrive: PChar;
begin
if not Assigned(aList)
then
Exit;
aList.BeginUpdate;
try
aList.Clear;
vDrivesSize := GetLogicalDriveStrings(SizeOf(vDrives), vDrives);
if vDrivesSize = 0
then
Exit;
if vDrivesSize > SizeOf(vDrives)
then
raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
vDrive := vDrives;
while vDrive^ <> #0
do
begin
aList.Add(vDrive);
Inc(vDrive, SizeOf(vDrive));
end;
finally
aList.EndUpdate;
end;
showmessage(aList.Text);
end;