Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
1-1079689062
bjohny
2004-03-19 12:37
2004.04.04
Компилятор


1-1079095364
Layner
2004-03-12 15:42
2004.04.04
Помогите обратится к данным динамического Edit...


14-1078933866
menart
2004-03-10 18:51
2004.04.04
Рыбалка :)


14-1078468956
Goida
2004-03-05 09:42
2004.04.04
Чуть-чуть о наследовании...


1-1079198303
$tranger
2004-03-13 20:18
2004.04.04
Не отображать форму при запуске