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