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

Вниз

216 ошибка при выходе   Найти похожие ветки 

 
miek   (2003-06-27 19:58) [0]

Программа слушает по OnMessage сообщения, которые ей приходят, и записывает их коды в массив. При закрытии программы в Win98 происходит ошибка 216, но в Win2K все тихо!

{...}
procedure KOLForm1FormCreate(Sender: PObj);
function KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
procedure KOLForm1Close(Sender: PObj; var Accept: Boolean);
procedure Timer1Timer(Sender: PObj);
public
s: array of cardinal;
p: integer;
end;

{...}

uses DecodeMsg;

{...}

procedure TForm1.KOLForm1FormCreate;
begin
setlength( s, 1000);
p:= 0;
end;

function TForm1.KOLForm1Message;
begin
s[p]:= msg.message;
inc( p);
if p>=length( s)-2 then // до этого места даже не доходило
setlength( s, length( s)+1000);
result:= false;
rslt:= -1;
end;

procedure TForm1.KOLForm1Close;
var
log: pstrlist;
i: integer;
begin
log:= newstrlist; // лог сохраняется нормально
for i:= 0 to p-1 do
( decodemsg.WM_Message2Str( s[ i]) Программа слушает по OnMessage сообщения, которые ей приходят, и записывает их коды в массив. При закрытии программы в Win98 происходит ошибка 216, но в Win2K все тихо!

{...}
procedure KOLForm1FormCreate(Sender: PObj);
function KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
procedure KOLForm1Close(Sender: PObj; var Accept: Boolean);
procedure Timer1Timer(Sender: PObj);
public
s: array of cardinal;
p: integer;
end;

{...}

uses DecodeMsg;

{...}

procedure TForm1.KOLForm1FormCreate;
begin
setlength( s, 1000);
p:= 0;
end;

function TForm1.KOLForm1Message;
begin
s[p]:= msg.message;
inc( p);
if p>=length( s)-2 then // до этого места даже не доходило
setlength( s, length( s)+1000);
result:= false;
rslt:= -1;
end;

procedure TForm1.KOLForm1Close;
var
log: pstrlist;
i: integer;
begin
log:= newstrlist; // лог сохраняется нормально
for i:= 0 to p-1 do
log.Add( decodemsg.WM_Message2Str( s[ i]));
log.SaveToFile( "log1.txt");
log.Free;
finalize( s);
end;

procedure TForm1.Timer1Timer;
begin
form.Caption:= int2str( p)+" , "+int2str( length( s));
// приходит около 50 сообщений в секунду
end;

{...}


 
Vladimir Kladov   (2003-06-28 06:09) [1]

А что бывает, когда приходит следующее сообщение после WM_CLOSE и переменная s уже потерта? Вообще-то 216, это переполнение стека, но это уже последствия.


 
miek   (2003-06-28 17:04) [2]

И вы совершенно правы!



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.07 c
14-43773
raptorus
2004-01-23 13:57
2004.03.14
Уважаемые, Мастера, подскажите как создать файл помощи .hlp?


1-43459
Adler
2004-03-01 00:35
2004.03.14
WordAppliation


9-43240
[Baradoo]
2003-01-14 21:54
2004.03.14
Огонь или как его реализовать в игре...


6-43742
Makhanev A.S.
2003-12-31 19:33
2004.03.14
Методика удалённой сверки версий файлов...


1-43576
Fishka
2004-02-27 10:29
2004.03.14
Запуск внешней программы и ожидание ее результатов