Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизGetVolumeInformation Найти похожие ветки
← →
DNS (2004-01-20 22:26) [0]Вызываю
function GetVolumeInformation(lpRootPathName: PChar;
lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL;
И постоянно вызывает ошибку : SysErrorMessage(GetLastError) возвращает "Имеются дополнительные данные" %(
Подскажите что делать?
← →
Anatoly Podgoretsky © (2004-01-20 22:58) [1]В приведом коде ошибки нет.
← →
YuRock © (2004-01-20 23:03) [2]17
← →
DNS (2004-01-21 13:41) [3]Перед этим я устанавливаю
SetErrorMode(SEM_FAILCRITICALERRORS);
(правда после его закоментирования ошибка таже, только при отсутсвии диска ругаеться...)
Вообще код такой:
var
DisksList: TListBox; // Список дисков в системе
DiskInfList: TListBox; // Инфа о выбранном диске
//.....
procedure TMainF.DisksListClick(Sender: TObject); // юзер выбрал
//диск
var
i:Integer;
lpFileSystemNameBuffer,lpRootPathName, lpVolumeNameBuffer:array [0..255] of char;
nVolumeNameSize,lpMaximumComponentLength, lpFileSystemFlags,nFileSystemNameSize:dword;
lpVolumeSerialNumber:dword;
begin
if DisksList.Count > 0 then
for i:=0 to DisksList.Count-1 do
if DisksList.Selected[i] then
begin
DiskInfList.Items.BeginUpdate;
DiskInfList.Items.Clear;
lpRootPathName[0]:=DisksList.Items[i][1];
lpRootPathName[1]:=":";
lpRootPathName[2]:="\";
if GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize, @lpVolumeSerialNumber,
lpMaximumComponentLength, lpFileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize) then
begin
// Инфа о носителе
DiskInfList.Items.Add("Файловая система: "+ String(lpFileSystemNameBuffer));
{<<< И т.д. (метка, тип ...)>>>}
//.....
//.....
end
else
begin
DiskInfList.Items.Add(SysErrorMessage(GetLastError)); //Получаем сообщение об ошибке
end;
DiskInfList.Items.EndUpdate;
Break;
end;
end;
Почему постоянно ошибка - ума не приложу %(
Может быть кто нибудь уже сталкивался с такой ситуацией и знает что не так?
P.S. Ради интереса проверил на другой машине - тоже самое!
← →
MBo © (2004-01-21 13:52) [4]Проходит без ошибок (Выдача Файловая система: FAT32)
Стоит добавить
lpRootPathName[3]:=#0;
← →
YuRock © (2004-01-21 14:05) [5]Ну так теперь все понятно! (извиняюсь за [2]).
Проблема в том, что Вы не указали размеры буферов, которые передаете в функцию, а так как они по умолчанию скорее-всего нули, а длина названия файловой системы больше нуля, то GetLastError и возвращает ошибку о недостатке памяти (в данном случае - для записи строки).
Т.е. для того, чтобы все заработало, надо перед вызовом функции GetVolumeInformation написать следующее:
nVolumeNameSize := 255;
nFileSystemNameSize := 255;
Счастливо!
← →
DNS (2004-01-21 22:39) [6]Паааасибочки, всё получилось.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.027 c