C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Исключения, Нужно сделать исключ. на "всю" прогу
Schumi
Отправлено: 06.11.2003, 12:34


Машинист паровоза

Группа: Участник
Сообщений: 206



У меня в проге куча try...catch.В основном,когда работаю с файлами.
Всё нормально.
Дело в том,что периодически прога отдаётся в работу.И,конечно,выскакивают глюки: выдаются сообщения на англ,типа ошибка по адресу такому и т.д.
Хотелось бы сделать так,чтобы я перехватывал эти сообщения,и выдавал своё сообщение,что типа обратитесь к разработчику.Но сделать это надо так,чтобы это не сказалось на работе уже имеющихся исключений.
Подмогите,как сделать.
Asher
Отправлено: 06.11.2003, 13:17


Мастер участка

Группа: Модератор
Сообщений: 550



Однако ohmy.gif
Люди — вы хоть в исходники собственных прог смотрите?
или только в дизайнере форм сидите?

За тебя уже все сделанно: В главном модуле программы
CODE

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
       try
       {
                Application->Initialize();
                Application->CreateForm(__classid(TfrmMain), &frmMain);
               ...
                Application->Run();
       }
       catch (Exception &exception)
       {
                Application->ShowException(&exception);
       }
       return 0;
}


Вместо Application->ShowException(&exception);
пиши свой MessageBox
Schumi
Отправлено: 08.11.2003, 16:57


Машинист паровоза

Группа: Участник
Сообщений: 206



Пытался,ни в какую.
Даже туда не обращается
Георгий
Отправлено: 08.11.2003, 20:08


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Может это какой-нибудь компонент так свои исключения обрабатывает?
Локализовать место появления исключения не пробовали?
John
Отправлено: 08.11.2003, 20:21


Не зарегистрирован







Я делаю так:
1. В конструкторе главной форма первой строчкой пишу:

Application->OnException = MyException;

2. Пищу функцию

void __fastcall TMain::MyException(TObject *Sender, Exception *E)
{
AnsiString s;
char *s1, *ss,
*s2 = "Cannot insert duplicate key"; // Часть английского сообщения
.........
s = E->Message;
s1 = s.c_str();
if (strstr(s1, s2) != NULL) {
Application->MessageBox("Русский перевод", "Ошибка", MB_OK);
if (strstr(s1, s3) != NULL) {
Application->MessageBox("......", "Ошибка", MB_OK);
..................
} else {
Application->MessageBox("Неизвестная ошибка", "Ошибка", MB_OK);
} // else
}

3. Где надо прототип.
vavone
Отправлено: 19.11.2003, 15:21


Не зарегистрирован







С этими исключениями беда какая-то.
Лично у меня не работает след. код:


void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDateTime TempDate;
try
{
TempDate = StrToDateTime("99.99.1998");
}
catch (const EConvertError &E)
{
ShowMessage(AnsiString(E.ClassName()) + "\n" + AnsiString(E.Message));
}
}


На ShowMessage не попадаю.
И кто подскажет, в чем дело?? sad.gif
Asher
Отправлено: 19.11.2003, 17:12


Мастер участка

Группа: Модератор
Сообщений: 550



To vavone:
проверил приведенный код — все работает. Только warning выдает на const перед EConvertError. Лучше бы убрать biggrin.gif
Стоит проверить разрешена ли остановка на Language Exeption

Отредактировано Asher — 19/11/2003, 19:15

Вернуться в Вопросы программирования в C++Builder