C/Visual C - COMO MANEJAR CUALQUIER EXCEPCION ?

 
Vista:

COMO MANEJAR CUALQUIER EXCEPCION ?

Publicado por ifer (52 intervenciones) el 21/02/2003 16:06:09
oK, existen las clases CException que trabajan con las macros try-Catch,
pero las CException son especificas para manejar desborde de memoria,
excepciones especificar de archivos, etc.; tendria que
hacer varios "catch" para atrapar todos estos,
existe una forma de atrapar CUALQUIER tipo de excepcion en general, solo
para mostrarlo ?
podria ser:
TRY{
}
CATCH_ALL (MyCadena)
{
AfxMessageBox(MyCadena);
}
siendo MyCadena un CString ?
o puede la clase base CException puede hacerlo?
En que se diferencian "try/catch" (minusculas) y "TRY/CATCH" (mayusculas) ambas son aceptadas por el compilador, pero su sintaxis es distinta, ademas todavia no entiendo la utilidad de "throw"
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:COMO MANEJAR CUALQUIER EXCEPCION ?

Publicado por fernando.gomez (61 intervenciones) el 25/02/2003 00:23:16
De hecho, CException es una excepcion de sistema operativo, en particular, de windows. Para catchear cualquier excepcion, tendrias que hacer algo asi:

try
{
// codigo
}
catch (...)
{
// lo que quieras hacer
}

lo que pasa, es que con esto no sabes que tipo de excepcion fue. Asi, tambien podrias manejarlo a nivel de palabras:
try { }
catch(DWORD dw)
{
//
}
y podrias hacer un switch para saber que tipo de error fue. eso si, tendrias que adentrarte en la documentacion del windows SDK para saber que numero de DWORD corresponde con que tipo de error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COMO MANEJAR CUALQUIER EXCEPCION ?

Publicado por fernando.gomez (61 intervenciones) el 25/02/2003 00:31:15
De hecho, CException es una excepcion de sistema operativo, en particular, de windows. Para catchear cualquier excepcion, tendrias que hacer algo asi:

try
{
// codigo
}
catch (...)
{
// lo que quieras hacer
}

lo que pasa, es que con esto no sabes que tipo de excepcion fue. Asi, tambien podrias manejarlo a nivel de palabras:
try { }
catch(DWORD dw)
{
//
}
y podrias hacer un switch para saber que tipo de error fue. eso si, tendrias que adentrarte en la documentacion del windows SDK para saber que numero de DWORD corresponde con que tipo de error.

Las diferencias entre try/catch/throw y TRY/CATCH/THROW son los #define's que encuentras. Estos #define's definen estas macros de acuerdo a las caracteristicas de tu sistema operativo. en general, son para portabilidad entre diferentes versiones de Windows.

La utilidad de throw es cuando quieres salirte del proceso porque se cometio algun error de usuario. Digamos que tienes un puntero a un CEdit y quieres validar que el usuario haya introducido datos. entonces:

// ...
try
{
CString csMsg;
obEdit->GetWindowText(csMsg);
if (csMsg == _T(""))
{
csMsg.Format(_T("Debe introducir algun dato."));
throw csMsg;
}
// ...
}
catch (CString csEx)
{
MessageBox(csEx.GetBuffer(0)), _T("ERROR"), MB_ICONERROR);
}

En conclusion, el throw te puede servir para controlar los errores que el usuario genere, y tratarlos como tales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar