| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > блок try catch |
| Автор: Dmi3ev 21.10.2008, 22:27 | ||
Объясните пожалуйста принцип действия try catch на этом примере, похоже я его не понимаю
непонятно следующее, я специально пишу в RichEdit имя файла, которого нет, соответственно в строке 7 возникает исключение, но оно не перехватывается блоком catch, выдает стандартное сообщение, а мое сообщение нет, разве три точки не перехватывают любые исключения??? |
| Автор: korian 21.10.2008, 22:39 |
| не знаю что такое TIdAttachment может исключение посылается в отдельном потоке? |
| Автор: Lazin 21.10.2008, 22:40 | ||
исключения VCL они не перехватывают
по моему, нужно так... Добавлено через 1 минуту и 9 секунд давно не пользовался билдером, но насколько я помню, исключения С++ и исключения VCL (наследники Exception) он перехватывает отдельно Добавлено через 1 минуту и 49 секунд возможно там TException, справки под рукой нет... |
| Автор: korian 21.10.2008, 22:53 | ||
ну не знаю, покрайней мере так работает:
единственное, под дебагом, перед тем как перейти в catch, выдает сообщение о том что было исключение. |
| Автор: Dmi3ev 21.10.2008, 22:54 |
| Lazin, не подходит, а как можно узнать какое исключение возникает? т.е., что писать в скобках у catch? Добавлено через 2 минуты и 56 секунд korian, я делал так множество раз, все было отлично, но вот в этот раз столкнулся с тем что исключение перехватываю не я. |
| Автор: Dmi3ev 21.10.2008, 23:26 | ||
даже конкретнее вопрос, увидел, что при появлении сообщения, он выдает class EFOpenError, я пишу:
Добавлено через 1 минуту и 9 секунд Ничего не меняется, что такое, не пойму. Раньше с таким не сталкивался. |
| Автор: Headcrab 22.10.2008, 00:56 | ||
catch(...) перехватит любое исключение неважно какого класса. Я сомневаюсь что EFOpenError у вас возникает именно в строке
т.к. там вызывася уонструктор предка (никак не связанный с именм файла) и без всяких проверок присваивается FileName. Скорее всего исключение кидается внутри чтототам->Send(), вот его и нужно окружить try-catch. |
| Автор: mrbrooks 22.10.2008, 07:47 |
| Dmi3ev, выложи весь код - что то не похоже что исключение срабатывает в представленном коде. возможно косяк с настройкой компонета. |
| Автор: Dmi3ev 22.10.2008, 12:47 |
| Headcrab, а вот это очень может быть, не обращал внимания, в какой строке ошибка, попробую, отпишусь вечером и выложу код по просьбе mrbrooksа. |
| Автор: Dmi3ev 22.10.2008, 20:58 | ||
Вот весь код, нашел, где у меня там Send, действительно логично его указать в блоке (по совету Headcrabа) написал вот так:
но ничего не изменилось, в скобках у catch указывал и EFOpenError&, тот же рузультат, исключение обрабатывается не мной, почему??? |
| Автор: mrbrooks 23.10.2008, 07:35 |
| Dmi3ev, у тебя исключение срабатывает при запуске из среды или когда ты экзешник запускаешь отдельно? |
| Автор: Dmi3ev 23.10.2008, 11:03 |
| из среды, а что экзешник по другому работает? хотя помню с бд парадоксом была такая штука, что при запуске из среды не фурычило, а экзешник работал идеально, но мне казалось, что глюк парадокса, а не билдера. Запускать экзешник чтоли? |
| Автор: mrbrooks 23.10.2008, 11:08 |
а ты проверь Дело все в том что при работе из среды Борман первым обрабатывает исключение и генерит свое предупреждение Поэтому у тебя и не появлялась твоя мессага. А запустив просто ехе-шник из того-же проводника уже сработает твое исключение. Можно отключить эту опцию в Бормане что бы он сам не генерил мессагу - но лучше не стоит. |
| Автор: Dmi3ev 27.10.2008, 16:25 |
| вообщем и правда, после запуска экзешника, все стало нормально, но в среде, эти сообщения так и не появились, какие-бы ок на стандартных сообщениях я не нажимал, вообщем буду знать, что борман может и такие шутки выкидывать, вообщем вопрос решен. |