try catch(...)
От: gnan  
Дата: 29.10.09 10:38
Оценка:
день добрый
столкнулся с проблемой по поводу try catch
налазив по инету, нашел пример, который, как утверждают авторы, очень работатет =)


try
{
   int a=50, b=0;
   a/=b;
}
catch(...)
{
    AfxMessageBox((LPCTSTR)"Error!", 0, 0);
}



проблема в том, что он не работает:
1. вываливается exception "Unhandled exception ..... Integet devision by zero"
2. не заходит в catch и не выполняет AfxMessageBox((LPCTSTR)"Error!", 0, 0);

вопрос:
как мне обрабатыват все исключения?
Re: try catch(...)
От: LaptevVV Россия  
Дата: 29.10.09 10:53
Оценка:
Здравствуйте, gnan, Вы писали:

G>день добрый

G>столкнулся с проблемой по поводу try catch
G>налазив по инету, нашел пример, который, как утверждают авторы, очень работатет =)
G>
G>try
G>{
G>   int a=50, b=0;
G>   a/=b;
G>}
G>catch(...)
G>{
G>    AfxMessageBox((LPCTSTR)"Error!", 0, 0);
G>}
G>

G>вопрос:
G>как мне обрабатыват все исключения?
Использовать SEH — исключения Windows. Стандартные С++-исключения не ловят аппаратных прерываний.
В С++ надо так:
try
{   int a=50, b=0;
    if(b == 0) throw /* здесь что-нибудь, напримр */ 1;
    else a/=b;
}
catch(...)
{    AfxMessageBox((LPCTSTR)"Error!", 0, 0);}
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: try catch(...)
От: lost_guadelenn  
Дата: 29.10.09 11:17
Оценка:
Здравствуйте, gnan, Вы писали:

G>как мне обрабатыват все исключения?

В студии, в свойствах проекта, C++ -> Code Generation -> Enable C++ Exceptions
поставить "Yes With SEH Exceptions (/EHa)"
Re: try catch(...)
От: Аноним  
Дата: 29.10.09 11:45
Оценка:
Здравствуйте, gnan, Вы писали:

G>день добрый

G>столкнулся с проблемой по поводу try catch
G>налазив по инету, нашел пример, который, как утверждают авторы, очень работатет =)


G>
G>try
G>{
G>   int a=50, b=0;
G>   a/=b;
G>}
G>catch(...)
G>{
G>    AfxMessageBox((LPCTSTR)"Error!", 0, 0);
G>}
G>



G>проблема в том, что он не работает:

G>1. вываливается exception "Unhandled exception ..... Integet devision by zero"
G>2. не заходит в catch и не выполняет AfxMessageBox((LPCTSTR)"Error!", 0, 0);

G>вопрос:

G>как мне обрабатыват все исключения?


Вот что говорит MSDN:


BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult)
{
    __try 
    { 
        *pResult = dividend / divisor; 
    } 
    __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? 
             EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
    { 
        return FALSE;
    }
    return TRUE;
}
Re: try catch(...)
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 29.10.09 12:41
Оценка:
Здравствуйте, gnan, Вы писали:

G>вопрос:

G>как мне обрабатыват все исключения?

CSeException: класс-обертка, позволяющий использовать structured exception handling (SEH) в стандартном для C++ стиле.

P.S.
Ключевое слово: _set_se_translator.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re[2]: try catch(...)
От: gnan  
Дата: 30.10.09 09:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, gnan, Вы писали:


LVV>
LVV>    if(b == 0) throw /* здесь что-нибудь, напримр */ 1;
LVV>


нет, так не пойдет.
желательно ловить все эксепшены, если будет желание, то потом сделаю с анализом ошибок
Re[2]: try catch(...)
От: gnan  
Дата: 30.10.09 09:55
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, gnan, Вы писали:


G>>вопрос:

G>>как мне обрабатыват все исключения?

SDB>CSeException: класс-обертка, позволяющий использовать structured exception handling (SEH) в стандартном для C++ стиле.


SDB>P.S.

SDB>Ключевое слово: _set_se_translator.

клевая вещь, над взять на заметку =)
даж вываливает что за эксепшн =)
Re[2]: try catch(...)
От: gnan  
Дата: 30.10.09 09:56
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, gnan, Вы писали:


G>>вопрос:

G>>как мне обрабатыват все исключения?

SDB>CSeException: класс-обертка, позволяющий использовать structured exception handling (SEH) в стандартном для C++ стиле.


SDB>P.S.

SDB>Ключевое слово: _set_se_translator.

клевая штука, над взять на заметку =)
даж вываливает что за эксепшн
Re[2]: try catch(...)
От: gnan  
Дата: 30.10.09 10:05
Оценка:
Здравствуйте, lost_guadelenn, Вы писали:

_>Здравствуйте, gnan, Вы писали:


G>>как мне обрабатыват все исключения?

_>В студии, в свойствах проекта, C++ -> Code Generation -> Enable C++ Exceptions
_>поставить "Yes With SEH Exceptions (/EHa)"

примного благодарен =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.