Главная страница
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.018 c
9-43243
dork
2003-08-25 05:28
2004.03.14
OpenGL


14-43855
тихий вовочка
2004-02-21 11:45
2004.03.14
По-моему непосильная работа


3-43259
mtb
2004-02-13 07:52
2004.03.14
Необходимы библиотеки libct.dll и libcs.dll


1-43535
Mentov
2004-02-29 17:50
2004.03.14
RichEdit


1-43585
yaric
2004-02-27 14:20
2004.03.14
Создание новой страницы PageControl?