Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
1-43619
ghg
2004-03-02 14:52
2004.03.14
закон перехода от одного цвета к другому


4-43941
Songoku
2004-01-07 01:34
2004.03.14
Диалог.


3-43387
ceval
2004-02-14 12:26
2004.03.14
программа с использыванием dbf файлов


1-43578
Ш-К
2004-02-27 15:20
2004.03.14
Как из события передать указатель на объект в мой обработчик?


1-43531
Woolen
2004-02-28 12:10
2004.03.14
Кряк для восьмерки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский