Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка исключений [Delphi, Windows]


-=Mike=- ©   (2006-01-18 03:50:00) 

В своем проекте я использую модуль err.pas. Много где пользуюсь процедурой Abort.
Но возникает одна проблема: т.к. в KOL нет обработчика исключений по умолчанию как например в VCL это сделано повторением в цикле операторов:
       try
         HandleMessage;
       except
         HandleException(Self);
       end;


Т.о. процедура Abort приводит к аварийному завершению программы.

Подскажите, как можно решить эту проблему???


Thaddy   (2006-01-18 21:03:00) [1]

Another usefull trick is this:

try
 //your code
except
//hardware interrupt
asm
  int 3
end;
end;

Then you can examine the callstack to find the last working routine...


-=Mike=-   (2006-01-18 19:59:00) [2]

Спасибо!
Попробую этот вариант


ECM   (2006-01-18 14:34:00) [3]

З.Ы. сорри (опечатка) - надо использовать не ProjectName_1.inc а
ProjectName_3.inc иначе доп. формы никогда не появятся ... :))


ECM   (2006-01-18 14:30:00) [4]

Можно так же как и в VCL  :))
Добавляем в проект новый Unit:

unit HandledRun;

interface
uses Windows,KOL;

procedure RunSafe( var AppletWnd: PControl );

implementation

procedure RunSafe( var AppletWnd: PControl );
begin
 AppletRunning := True;
 Applet := AppletWnd;
 AppletWnd.CreateWindow; //virtual!!!
 while not AppletTerminated do
 begin
   try
     WaitMessage;
     AppletWnd.ProcessMessages;
     {$IFDEF USE_OnIdle}
     ProcessIdle( AppletWnd );
     {$ENDIF}
   except
   // Пишем тут обработчик (если нужен)
   end;
 end;
 if AppletWnd <> nil then
   TerminateExecution( AppletWnd );
end;

end.


Открываем файл ProjectName_1.inc и добавляем две строки:

{ xxx_1.inc
 This file is for you. Place here any code to run it
 just following Applet creation (if it present) but
 before creating other forms. E.g., You can place here
 <IF> statement, which prevents running of application
 in some cases. TIP: always use Applet for such checks
 and make it invisible until final decision if to run
 application or not. }

 RunSafe(Form1.Form );
 Halt(0);


собственно всё...:))


Наверх

Титульная страница Поиск, карта сайта Написать письмо