Конференция "WinAPI" » QueryDosDevice ошибка 998
 
  • zFire © (05.04.17 11:24) [0]
    Пример кода:
    Function GetDriveList:TDriveList;
    Var
     Str  :Array [0..1 shl 9] of Char;
     Drive:Array [0..2] of Char;
     I,J  :Integer;
     Drives:Cardinal;
    Begin
     Drives:=GetLogicalDrives;
     FillChar(Str,SizeOf(Str),#0);
     SetLength(Result,0);
     Drive[1]:=':';
     Drive[2]:=#0;
     For I := 0 to 31 do
       If (Drives and (1 shl I)<>0) Then
         Begin
           J:=High(Result)+1;
           SetLength(Result,J+1);
           Drive[0]:=Chr(I+$41);
           Result[J].Drive:=Drive[0];
           if QueryDosDevice(Drive,Str,SizeOf(Str))>0 Then
             Begin
               Result[J].HardName:=Str;
             End;
         End;
    End;



    На обработчике кнопки код работает без ошибок, а в блоке Initialization
    QueryDosDevice выдает ошибку 998(Неверная попытка доступа к адресу памяти) в чем может быть загвоздка? (Delphi XE7 32-bit, Win7)
  • zFire © (05.04.17 15:18) [1]
    Самое интересное, что если использовать глобальные переменные
    Str  :Array [0..1 shl 9] of Char;
    Drive:Array [0..2] of Char;


    то все работает?!
    Как такое может быть?
  • rrrrr © (05.04.17 15:25) [2]
    модуль только-только загрузился, легкие не успел расправить.
    стек мог не успеть распределить место под локальные переменные функций.

    ну или там у тебя ошибка
  • zFire © (05.04.17 16:56) [3]
    Я переписал с динамическим выделением памяти под массивы и все заработало, на Д7 такого не было...


    > модуль только-только загрузился, легкие не успел расправить.

    Как-то сомнительно, когда происходит переход в процедуру/функцию память под массивы должна уже быть выделена!
  • Rouse_ © (05.04.17 20:48) [4]

    > стек мог не успеть распределить место под локальные переменные
    > функций.

    так тоже бывает? :)
  • rrrrr © (06.04.17 08:36) [5]
    если у него из под иниц работает именно тот код что приведен, то бывает.

    в противном случае ответ в третьей строке [2]
 
Конференция "WinAPI" » QueryDosDevice ошибка 998
Есть новые Нет новых   [134427   +34][b:0][p:0.001]