-
Скажите, пожалуйста, можно ли установить процедуру, которая будет вызываться при любой ошибке, происходящей в моей программе (при которой отображается окошко Runtime Error)? Просто хочется сделать запасной вариант вроде отображения сообщения: "Непридвиденная ошибка. Попробуйте переустановить игру" и сделать экстренный выход с освобождением памяти... Просто вдруг какой-нибудь файл останется из старой версии игры, и игра по таймеру каждый кадр будет отображать окошко "Runtime Error" и тормозить систему (уже было так) :)
Если можно это сделать, то подскажите, пожалуйста, как.
-
> процедуру, которая будет вызываться при любой ошибке, происходящей > в моей программе
Нельзя. Нет и не может быть такой процедуры.
-
> Нельзя. > Нет и не может быть такой процедуры.
Тогда при каком условии вызывается окошко "Runtime Error"? Не просто же так... или в обычном VCL-приложении - "Access Violation"?
-
> при каком условии вызывается окошко "Runtime Error"?
При необработанной ран-тайм ошибке. Код которой, кстати, тайна за семью печатями - ты же его прячешь)
> или в обычном VCL-приложении - "Access Violation"?
Не надо месить в одну кучу ошибки и исключения - и тех и других тьма тьмущая самых разных, по самому разному поводу.
-
> > при каком условии вызывается окошко "Runtime Error"? > При необработанной ран-тайм ошибке.
Так мне это и нужно. Каким образом появляется окошко?
> Код которой, кстати, тайна за семью печатями - ты же его > прячешь)
Не понял... Я же в общем случае говорю, код любой может быть.
А исключения в Delphi на все ошибки предусмотрены или нет?
-
Такие ошибки можно перехватить с помощью функции SetUnhandledExceptionFilter ( http://msdn.microsoft.com/en-us/library/ms680634(VS.85).aspx). Ей передается callback, в котором можно определить поведение программы при наступлении необработанной ошибки.
-
> мне это и нужно
Если ты в ходе работы своего приложения изгадил до неузнаваемости, к примеру, RTL, то тебе никакие перехваты уже не помогут.
-
try
except
YourProcedure;
ShowMessage('Зря Вы установили мою игру! В ней слишком много ошибок! Немедленно удалите её и отформатируйте жёсткий диск!');
end;
Ну или вроде того :)
-
Application.OnException
-
А как ж Application.OnException ?
-
> 123-ий (28.07.2008 11:38:07) [7]
А спрашивать зачем, ведь он уже установил, пусть сразу и форматирует, что бы не зря.
-
Удалено модератором Примечание: Обсуждение модерирования
-
> Alucard (27.07.08 21:09) [5]
Спасибо, я попробую.
-
Сделал так: SetUnhandledExceptionFilter(@ExceptionHandler);
function ExceptionHandler(Pointers : Pointer) : Integer; stdcall;
begin
MessageBox(glHandle, 'Serious error', 'error', MB_ICONHAND);
Result := 1; end; Функция не вызывается. Отображается стандартное окно "Runtime Error" (Проект без VCL).
|