Programación General > Visual C++

 Compilador Y Seh

(1/2) > >>

diego.martinez:
Buenas:

Me he creado una macro, que dependiendo de si se define un define mio, cambia la forma en la que se reciben las excepciones:


--- Código: Text ---  #ifdef DEBUG_APP_ERROR  #define _APP_TRY __try  #define _APP_CATCH(m) __except (ExpFilter(m,GetExceptionInformation(), GetExceptionCode(),__LINE__,__FUNCTION__)){}#else  #define _APP_TRY try  #define _APP_CATCH(m) catch(...) {}#endif 
despues lo uso en un cacho de codigo:


--- Código: Text --- #define DEBUG_APP_ERRORwhile (!app->IsFinished())    {        _APP_TRY        {            app->Init     ();        app->Main   ();        app->End   ();        }        _APP_CATCH("Bucle Principal");    }  

Bueno, el caso es que cuando lo compilo, me dice :

Cannot use __try in functions that require object unwinding Cannot use __try in functions that require object unwinding

He buscado en Google y la causa es que no compilaba con /GX- para deshabilitar las SEH y usar try/catch de c (corregidme si me equivoco).

La cosa ahora es que con esa opcion, cuando compilo, el compilador me saca otro warning si uso el "using namespace STD".

warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc

Bueno, pues son Incompatibles uno con el otro /Gx- override /EHsc , si quito /Gx- me dice que no puede hacerlo y si lo pongo me dice que no tiene el unwind...

¿Que estoy haciendo mal?
¿Puedo ignorar el warning?
¿Me estoy liando y realmente no entendi bien?

Gracias por adelantado y disculpad el tamaño del post.

Danielo:
:think:  en algunos compiladores (como el de CygWin) el iostream.h ha quedado obsoleto, y hay que utilizar iostream (sin el .h)


--- Código: Text ---#include <iostream> 
A lo mejor con eso desaparece el warning de "using namespace STD".

Eternal Idol:
Si, son incompatibles, SEH esta pensado para C y no es parte del lenguaje (ni de C ni de C++) sino que es la forma de capturar excepciones en Windows, por eso te da warning cuando usas objetos.

diego.martinez:
gracias por la respuesta.

lo tenia como  #include <iostream>
por que el iostream.h ni lo encuentra

asi que ningun cambio por ahi.

los warning todos aparecen en iostream.h y en ostream.h

uso Visual Studio .Net 2003 por si se os ocurre si es alguna cosa propia del compilador.

diego.martinez:
vaya, justo estaba respondiendole a Danielo cuando ha respondido EternalIdol.

Entonces, es un buen lio, por que tengo parte de codigo usando try/catch de c y otra parte de SEH...

Tendria que limpiarlo todo , entonces la pregunta es...
si es una aplicacion windows es mejor usar SEH por los ExceptionHandlers o es mejor __try/__catch?.

Si en un mismo obj no se mezclan los 2 modelos (Se conmutan con el Define); puede la aplicacion convivir con modulos SEH y  otros con try de c  o  es peligroso?

gracias por las respuestas.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa