Hallo,
ich kämpfe mal wieder mit
WinAPI
Delphi 7
Folgendes ist gegeben:
Delphi-Quellcode:
...
type
TVolumeRec = record
DeviceStr : String;
VolumeStr : String;
PathStr : String;
end;
...
procedure SplitVolumeNames(aVolume : Array of Char; var aVolumeRec : TVolumeRec);
var
BufferLength,
ReturnLength : DWORD;
VolumePathNames : PChar;
begin
BufferLength := MAX_PATH + 1;
aVolumeRec.VolumeStr := Copy(aVolume, 1, BufferLength);
VolumePathNames := StrAlloc(BufferLength);
if GetVolumePathNamesForVolumeName(PChar(aVolumeRec.VolumeStr), VolumePathNames, BufferLength, ReturnLength) then
aVolumeRec.PathStr := StrPas(VolumePathNames);
StrDispose(VolumePathNames);
VolumePathNames := StrAlloc(BufferLength);
if (QueryDosDevice(PChar(aVolumeRec.VolumeStr), VolumePathNames, BufferLength) > 0) then
aVolumeRec.DeviceStr := VolumePathNames
else
ErrorDesc(GetLastError);
StrDispose(VolumePathNames);
end;
function GetVolumes(var aVolumeRecList : TVolumeRecList) : Boolean;
var
hVolume : THandle;
nVolume : Array[0..MAX_PATH] of Char;
I : Integer;
begin
I := 0;
hVolume := FindFirstVolume(nVolume, SizeOf(nVolume));
if hVolume <> INVALID_HANDLE_VALUE then
repeat
SplitVolumeNames(nVolume, aVolumeRecList[I]);
Inc(I);
until not FindNextVolume(hVolume, nVolume, SizeOf(nVolume));
FindVolumeClose(hVolume);
SetLength(aVolumeRecList, I);
Result := Length(aVolumeRecList) > 0;
end;
Es geht bist auf die Tatsache, das
QueryDosDevice immer den Fehler zurück gibt:
Zitat:
Der angegebene Pfadname ist ungültig.
Der vorhergehende Aufruf von
GetVolumePathNamesForVolumeName liefert jedoch den
korrekten Wert: 'E:\'.
Hat jemand einen Tipp?
Ach so, über gebe ich bei
GetVolumePathNamesForVolumeName das Ziel so:
Delphi-Quellcode:
var
VolumePathNames : String;
begin
if GetVolumePathNamesForVolumeName(PChar(aVolumeRec.VolumeStr),
@VolumePathNames[1],
BufferLength, ReturnLength) then
aVolumeRec.PathStr := VolumePathNames;
Kommt es zu einer ZV.
Danke