Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.016 c
3-43303
dendy
2004-02-12 00:12
2004.03.14
SQL запрос, заглавные и прописные


14-43768
Mox Fulder
2004-02-19 12:52
2004.03.14
BDE


14-43851
Undert
2004-02-19 18:58
2004.03.14
Как в HTML сделать SpinEdit ?


9-43237
Orc
2003-08-27 09:25
2004.03.14
Timer с DirecxX


14-43859
ИМХО
2004-02-21 17:28
2004.03.14
Усё, Арсенал можно поздравить!




   Наверх