Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизI/O error 998 Найти похожие ветки
← →
DeScriptor (2003-09-08 01:44) [0]Люди!
Может, кто знает, где найти описание сабжа?! В хелпе по дельфям таковский номер еррора не значится!!! А он имеет место быть.
Что делать, как понять, чего ему нада? Как с этим бороться?
Заранее THNX!!!
p.S. Я обходил это конструкцией{$I-} blah, blah, blah {$I+}
, но все равно - нафига такая ошибка?
← →
Ihor Osov'yak (2003-09-08 01:50) [1]Случаем не это
//
// MessageId: ERROR_NOACCESS
//
// MessageText:
//
// Invalid access to memory location.
//
#define ERROR_NOACCESS 998L
см. winerror.h c. ddk
← →
DeScriptor (2003-09-08 17:19) [2]Нет. Моя ошиба вываливается при работе с файлами...
← →
ZEE (2003-09-08 17:22) [3]I/O лучше обходить такой конструкцией
try ... finally ... end;
← →
ZEE (2003-09-08 17:23) [4]пардон
I/O error лучше обходить ... и т.д. :)
← →
han_malign (2003-09-08 17:33) [5]>Как с этим бороться?
ERROR_NOACCESS
Invalid access to memory location.
- не залезать в область кода, при записи данных в память - нормально буфура выделять и за границами следить...
← →
Dmk (2003-09-08 20:54) [6]http://www.gregorybraun.com/MSWinErr.html
← →
Anatoly Podgoretsky (2003-09-08 21:02) [7]ShowMessage(SysErrorMessage(998));
← →
DeScriptor (2003-09-11 19:58) [8]> - не залезать в область кода, при записи данных в память -
> нормально буфура выделять и за границами следить...
А нельзя ли с этого места поподробнее? Как это, "не залезать в область кода"? Как узнать где она, чтобы в нее не врубиться? Вот участок кода. Строка, на которой возникает ошибка, помечена жирным:
procedure SearchHeaders();
BlockWrite(TempFile,Pointer(OffsetsList)^,length(OffsetsList));
var CurOffset:longword;
i,j,OffCount:word;
CurHeader:string;
TempFile:file;
begin
MainWin.ProgBarCurrent.Max:=ResFile.FullSize;
OffCount:=0;
CurOffset:=0;
while ResFile.ReadBlock(CurOffset)=FSuccess do begin
for i:=0 to High(ResFile.DataBlock) do begin
CurHeader:="";
if i<= 65532 then CurHeader:=chr(ResFile.DataBlock[i])+chr(ResFile.DataBlock[i+1])+chr(ResFile.DataBlock[i+2])+chr(ResFile.DataBlock[i+3]) ;
for j:=0 to (MainWin.VFormatsList.Count-1) do begin
if MainWin.VFormatsList.Selected[j] and (FormatsList[j]=CurHeader) then begin
OffCount:=OffCount+1;
SetLength(OffsetsList,OffCount);
OffsetsList[Offcount-1]:=i+CurOffset;
end;
end;
end;
CurOffset:=CurOffset+65530;
MainWin.ProgBarCurrent.Position:=CurOffset;
MainWin.ProgBarCurrent.Repaint;
end;
OffCount:=OffCount+1;
SetLength(OffsetsList,OffCount);
OffsetsList[Offcount-1]:=ResFile.FullSize;
assignfile(TempFile,"testfile.off");
{$I-}
Rewrite(TempFile,4);
{$I+}
CloseFile(TempFile);
end;
Пожалуйста, объясните, если кто может, в чем моя ошибка? Когда в массивеOffsetsList
малое количество значений (5), все в порядке. ResFile - это объект моего класса BinaryFile для работы с файлами в "двоичном" режиме, т.е. побайтово.
← →
Юрий Зотов (2003-09-11 20:09) [9]BlockWrite(TempFile, OffsetsList[0], Length(OffsetsList));
← →
DeScriptor (2003-09-12 15:45) [10]Неа. Проверял, что
BlockWrite(TempFile, OffsetsList[0], Length(OffsetsList))
, чтоBlockWrite(TempFile,Pointer(OffsetsList)^,length(OffsetsList))
- все едино! По-моему, где-то в справке сказано, что обращение к нулевому эл-ту массива есть заодно указатель на его начало, т.е. то же самое, что и Pointer(массив)^.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c