-
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]