![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка исключений [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);
собственно всё...:))