• Sábado 14 de Diciembre de 2024, 17:57

Autor Tema:  Compilador Y Seh  (Leído 1919 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Compilador Y Seh
« en: Lunes 19 de Febrero de 2007, 11:35 »
0
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
  1.  
  2.  
  3. #ifdef DEBUG_APP_ERROR
  4.   #define _APP_TRY __try
  5.   #define _APP_CATCH(m) __except (ExpFilter(m,GetExceptionInformation(), GetExceptionCode(),__LINE__,__FUNCTION__)){}
  6. #else
  7.   #define _APP_TRY try
  8.   #define _APP_CATCH(m) catch(...) {}
  9. #endif
  10.  

despues lo uso en un cacho de codigo:

Código: Text
  1.  
  2. #define DEBUG_APP_ERROR
  3. while (!app->IsFinished())
  4.     {    
  5.     _APP_TRY
  6.         {    
  7.         app->Init     ();
  8.         app->Main   ();
  9.         app->End   ();
  10.         }
  11.         _APP_CATCH("Bucle Principal");
  12.     }
  13.  
  14.  


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

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #1 en: Lunes 19 de Febrero de 2007, 12:09 »
0
: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
  1. #include <iostream>
  2.  

A lo mejor con eso desaparece el warning de "using namespace STD".
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #2 en: Lunes 19 de Febrero de 2007, 12:16 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #3 en: Lunes 19 de Febrero de 2007, 12:22 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #4 en: Lunes 19 de Febrero de 2007, 12:27 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #5 en: Lunes 19 de Febrero de 2007, 12:39 »
0
Cita de: "diego.martinez"
Entonces, es un buen lio, por que tengo parte de codigo usando try/catch de c y otra parte de SEH...

¿Existe alguna razon para que lo hayas hecho asi?

Cita de: "diego.martinez"
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?.

Te recomiendo que leas MUY DETENIDAMENTE lo que comenta en la MSDN sobre esas opciones (/EH, /GX, etc).

Cita de: "diego.martinez"
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?

Segun me parecio entender lo que puede pasar es que no captures todas las excepciones que se suponen ibas a capturar y que como indica el warning no se destruyan correctamente los objetos pese a capturar la excepcion. Pere me remito a la anterior respuesta  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Compilador Y Seh
« Respuesta #6 en: Lunes 19 de Febrero de 2007, 13:57 »
0
La razon es que no todos los modulos los he hecho yo, tendria que cambiarlos.  &lt;_&lt;

A mi tambien me parece que no esta capturando las excepciones internas...

Gracias por las respuestas, seguire investigando...