Главная страница
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.03 c
3-43363
AZ
2004-02-12 16:02
2004.03.14
Доступ к защищенной БД


3-43271
Hollywood
2004-02-12 18:37
2004.03.14
сохранение ftFloat в поле Float MSSQL


7-43912
Retro
2003-12-23 22:16
2004.03.14
Присоедениния exe к фаилу *.doc или excel


4-43948
Duke DEE
2004-01-04 14:48
2004.03.14
Как изменить текст Tedit в чужом окне?


1-43569
smirnoff
2004-02-27 17:10
2004.03.14
не закидывайте камнями. просто срочно надо