Текущий архив: 2008.09.07;
Скачать: CL | DM;
Вниз
Процедура, вызываемая при ошибке в программе. Найти похожие ветки
← →
AlexanderMS © (2008-07-27 18:30) [0]Скажите, пожалуйста, можно ли установить процедуру, которая будет вызываться при любой ошибке, происходящей в моей программе (при которой отображается окошко Runtime Error)? Просто хочется сделать запасной вариант вроде отображения сообщения: "Непридвиденная ошибка. Попробуйте переустановить игру" и сделать экстренный выход с освобождением памяти...
Просто вдруг какой-нибудь файл останется из старой версии игры, и игра по таймеру каждый кадр будет отображать окошко "Runtime Error" и тормозить систему (уже было так) :)
Если можно это сделать, то подскажите, пожалуйста, как.
← →
Сергей М. © (2008-07-27 18:38) [1]
> процедуру, которая будет вызываться при любой ошибке, происходящей
> в моей программе
Нельзя.
Нет и не может быть такой процедуры.
← →
AlexanderMS © (2008-07-27 18:49) [2]
> Нельзя.
> Нет и не может быть такой процедуры.
Тогда при каком условии вызывается окошко "Runtime Error"? Не просто же так... или в обычном VCL-приложении - "Access Violation"?
← →
Сергей М. © (2008-07-27 18:57) [3]
> при каком условии вызывается окошко "Runtime Error"?
При необработанной ран-тайм ошибке.
Код которой, кстати, тайна за семью печатями - ты же его прячешь)
> или в обычном VCL-приложении - "Access Violation"?
Не надо месить в одну кучу ошибки и исключения - и тех и других тьма тьмущая самых разных, по самому разному поводу.
← →
AlexanderMS © (2008-07-27 19:23) [4]
> > при каком условии вызывается окошко "Runtime Error"?
> При необработанной ран-тайм ошибке.
Так мне это и нужно. Каким образом появляется окошко?
> Код которой, кстати, тайна за семью печатями - ты же его
> прячешь)
Не понял... Я же в общем случае говорю, код любой может быть.
А исключения в Delphi на все ошибки предусмотрены или нет?
← →
Alucard (2008-07-27 21:09) [5]Такие ошибки можно перехватить с помощью функции SetUnhandledExceptionFilter (http://msdn.microsoft.com/en-us/library/ms680634(VS.85).aspx). Ей передается callback, в котором можно определить поведение программы при наступлении необработанной ошибки.
← →
Сергей М. © (2008-07-28 08:13) [6]
> мне это и нужно
Если ты в ходе работы своего приложения изгадил до неузнаваемости, к примеру, RTL, то тебе никакие перехваты уже не помогут.
← →
123-ий © (2008-07-28 11:38) [7]
try
// Код, в котором скорее всего возникнет стопицот ошибок
except
YourProcedure;
ShowMessage("Зря Вы установили мою игру! В ней слишком много ошибок! Немедленно удалите её и отформатируйте жёсткий диск!");
end;
Ну или вроде того :)
← →
Ega23 © (2008-07-28 11:40) [8]Application.OnException
← →
TUserClass © (2008-07-28 11:41) [9]А как ж
Application.OnException
?
← →
Anatoly Podgoretsky © (2008-07-28 11:50) [10]> 123-ий (28.07.2008 11:38:07) [7]
А спрашивать зачем, ведь он уже установил, пусть сразу и форматирует, что бы не зря.
← →
AlexanderMS © (2008-07-28 12:02) [11]Удалено модератором
Примечание: Обсуждение модерирования
← →
AlexanderMS © (2008-07-28 12:05) [12]
> Alucard (27.07.08 21:09) [5]
Спасибо, я попробую.
← →
AlexanderMS © (2008-07-30 11:17) [13]Сделал так:
SetUnhandledExceptionFilter(@ExceptionHandler);
function ExceptionHandler(Pointers : Pointer) : Integer; stdcall;
begin
MessageBox(glHandle, "Serious error", "error", MB_ICONHAND);
Result := 1;//EXCEPTION_EXECUTE_HANDLER;
end;
Функция не вызывается. Отображается стандартное окно "Runtime Error" (Проект без VCL).
← →
Leonid Troyanovsky © (2008-07-30 11:50) [14]
> AlexanderMS © (30.07.08 11:17) [13]
> Функция не вызывается. Отображается стандартное окно "Runtime
> Error" (Проект без VCL).
Для того, чтобы она могла вызываться необходимо
заменить System.pas своей версией.
А, во-ще-то, RTFM: ExceptProc variable.
--
Regards, LVT.
← →
AlexanderMS © (2008-07-30 12:37) [15]
> Alucard (27.07.08 21:09) [5]
Спасибо большое! Всё работает! Просто я запускал из-под Delphi, а теперь запустил из Проводника, и функция работает. Только потом всё равно отображется окно с Runtime Error, но это не проблема.
> Для того, чтобы она могла вызываться необходимо
> заменить System.pas своей версией.
>
> А, во-ще-то, RTFM: ExceptProc variable.
Спасибо за информацию.
← →
Сергей М. © (2008-07-30 12:55) [16]
> AlexanderMS
С причиной (источник ошибки) надо бороться, а не со следствием (извещение юзера об ошибке).
Страницы: 1 вся ветка
Текущий архив: 2008.09.07;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.004 c