Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Вниз

Процедура, вызываемая при ошибке в программе.   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
2-1217258154
lavgirls
2008-07-28 19:15
2008.09.07
Выравнивание текста


2-1217343723
Vikindos
2008-07-29 19:02
2008.09.07
2 просесса в одном приложении


15-1215881130
Guest
2008-07-12 20:45
2008.09.07
В чём ошибка?


13-1120735770
WondeRu
2005-07-07 15:29
2008.09.07
Релизы SQL Server2005 и Visual Studio2005 анонсировны на 7 ноября


2-1217263235
Trofim
2008-07-28 20:40
2008.09.07
Почему в QReport появляются пустые листы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский