Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Try catch в консольном приложении / 11 сообщений из 11, страница 1 из 1
21.09.2006, 15:18
    #34003483
XNut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
Пытаюсь в консольном приложении на Билдере использовать try catch, но не получается
В чем может быть дело?
...
Рейтинг: 0 / 0
21.09.2006, 15:23
    #34003505
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
Исходники покажи :)
...
Рейтинг: 0 / 0
21.09.2006, 15:33
    #34003562
XNut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
Например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main(int argc, char* argv[])
{
  int w= 0 ;
  try{
	w= 8 /w;
  }catch(...){
	w=- 9 ;
  }
  return  0 ;
}

Дело не в коде. Может быть нужно выполнить какие-нибудь действия перед использованием try.
К примеру, OlePropertyGet в консоле тоже не работает, пока не инициализируешь COM.
...
Рейтинг: 0 / 0
21.09.2006, 15:41
    #34003607
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
XNut
X> int main(int argc, char* argv[])
X> {
X> int w=0;
X> try{
X> w=8/w;
X> }catch(...){
X> w=-9;
X> }
X> return 0;
X> }


как определил, что не работает ? У меня всё нормально

--
PS: Altera manu fert lapidem, panem ostentat altera
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.09.2006, 15:52
    #34003687
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
XNut....Дело не в коде....

угумс..в КОМПИЛЯТОРЕ...точнее ключах компилятора..
читаем МСДН, думаем....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
// compiler_options_EHA.cpp
// compile with: /EHa
#include <iostream>
#include <excpt.h>
using namespace std;

void fail() {   // generates SE and attempts to catch it using catch(...)
   try {
      int i =  0 , j =  1 ;
      j /= i;   // This will throw a SE (divide by zero).
   }
   catch(...) {   // catch block will only be executed under /EHa
      cout<<"Caught an exception in catch(...)."<<endl;
   }
}

int main() {
   __try {
      fail(); 
   }

   // __except will only catch an exception here
   __except(EXCEPTION_EXECUTE_HANDLER) {   
   // if the exception was not caught by the catch(...) inside fail()
      cout << "An exception was caught in __except." << endl;
   }
}

Обратите особое внимание на ключик /EHa !!! Либо поищите его в МСДНе..там усё написано...


с уважением
(круглый)
...
Рейтинг: 0 / 0
21.09.2006, 15:53
    #34003694
XNut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
В VCL приложении работает.
А в консольном на BreakPoint не останавливается
У меня C++B6
...
Рейтинг: 0 / 0
21.09.2006, 15:55
    #34003710
XNut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
Спасибо, колобок, посмотрю
...
Рейтинг: 0 / 0
21.09.2006, 15:56
    #34003717
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
XNutСпасибо, колобок, посмотрю

это правда от милкософта..но думаю вектор поиска похож...

(круглый)
...
Рейтинг: 0 / 0
25.09.2006, 07:55
    #34008705
Shiklgruber
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
to XNut

Такие же запарки ( c Borland Compiler 5.5) , "перетряс" все ключи, и ничего не нашел =(

есть какие нить варианты?
...
Рейтинг: 0 / 0
25.09.2006, 08:39
    #34008743
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
После более детального изучения (в C++Builder 5, там компилятор 5.5) проблема была обнаружена :)

я не знаю точно, какие опции компилятора надо включать/выключать, но неработающие исключения стали работать после замены в файле проекта выделенной строки:
Код: plaintext
1.
2.
3.
4.
5.
  <LINKER>
    <ALLOBJ value="c0x32.obj $(OBJFILES)"/>
    <ALLRES value="$(RESFILES)"/>
    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
  </LINKER>
а в таком варианте не работает:
Код: plaintext
1.
    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32mt.lib"/>
получается, что за хэндлинг эксепшнов отвечает cp32mti.lib
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25.09.2006, 17:39
    #34010667
cpp_expert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в консольном приложении
Использовать catch(...) одним и единственным вариантом обработки исключения как-то не очень правильно. Эта конструкция действительно не всегда срабатывает, более того, ее поведение специфично на разных платформах.
Этот блок обычно ставят последним в цепочке обработки типизированных исключений, но он ничего не гарантирует!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Try catch в консольном приложении / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]