![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перехватывать обработчики ошибок? [D6, WinME]
Helg © (2002-07-28 09:39:00)Подскажите, как перехватывать ошибки. Такая конструкция почему-то не работает:
procedure ErrorsMs(ErrorCode:Integer;ErrorAdr:Pointer);
begin
ErrMess("Error "+IntToStr(ErrorCode)); // процедура вывода сообщения
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ErrorProc:=@ErrorsMs;
...
end;
DAO (2002-07-28 13:23:00) [1]Удалено модератором
TTCustomDelphiMaster (2002-07-28 11:34:00) [2]procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
ShowMessage("Error with "+Sender.ClassName+" "+E.Message);
ShowException(ExceptObject, ExceptAddr);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c: double;
begin
Application.OnException := AppException;
a:=0;
b:=1;
c:=b/a;
ShowMessage(Floattostr(c));
end;
Helg (2002-07-28 11:28:00) [3]Ага, ясно. А как же быть? Я пишу программу для одного клиента, он постоянно подключен к Интернету. Мне надо, чтобы все сообщения об ошибках автоматом летели ко мне в ящик. С Интернетом проблем нет, а как все-таки перехватывать?
object pascal (2002-07-28 11:17:00) [4]В принципе она работает.
Из help"a:
The ErrorProc variable is retained primarily for compatibility with older Pascal code.
На всякий случай переведу:
Переменная ErrorProc оставлена главным образом для совместимости со старым паскалевским кодом.
Она вызывается из ф-и Error (system.pas) и должна содержать возбуждение исключения, чтобы предотвратить дальнейший ход этой процедуры (реализующий старую обработку ошибок).
И так как это артефакт старого паскаля, через неё проходят далеко не все ошибки. Например:
var a, b: Integer;
procedure TForm1.FormCreate(Sender: TObject);
var f: TextFile;
begin
ErrorProc := @MyErrorHandler;
WriteLn(f, 1); // Пройдёт через ErrorProc
a := 0;
b := 1 mod a; // Не пройдёт через ErrorProc
end;