Para comenzar a utilizar el SEH (Structured Exception Handling) primero que nada comenzaremos definiendo que es una “Excepción“.
Excepción:
Es un evento que ocurre durante la ejecución de un programa y require la ejecución de codigo fuera del flujo normal de control.
Hay dos tipos de excepciones:
Suceden cuando por ejemplo el programa pasa un parámetro invalido
Son iniciadas por el CPU y ocurren cuando son ejecutadas secuencias de código invalidas como una división por zero
Las cuales serán tratadas de la misma forma por nuestro manejador de excepciones.
Bloque de Código SEH
__try
{
/* Bloque de código en el cual podría generarse una excepción*/
}
__except(/*Expresión de filtrado*/)
{
/* Bloque de código el cual se ejecutará inmediatamente después de que se produzca la excepción en el bloque anterior */
}
El bloque de codigo anterior es la estructura la cual nos servirá para manejar las excepciones.
Ahora ¿cómo saber que bloque de código meter en “try”?
Para que nos demos una idea aplicaremos el SEH en estos casos:
Ejemplo de uso de SEH
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main()
{
__try
{
int x,y = 0;
int z;
z = x / y;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
MessageBoxA(0,"Capturamos la excepcion","SEH Activo",0);
}
return 0;
}
Como podemos ver en el anterior ejemplo de código, dentro de try incluimos una división por 0, al ejecutarse ese bloque inmediatamente se salta al bloque de “except” el cual siempre se le pasará un parámetro definido ya en unas constantes:
Se ejecuta inmediatamente el bloque de código contenido en __except
El sistema ignora el manejador de excepciones y busca por un manejador de excepciones dentro del bloque, y continua hasta que encuentra un manejador
El sistema inmediatamente regresa el control al punto en el cual la exepción ocurrió aunque no es posible continuar después de que ocurran “ciertas” excepciones.
Y esto ha sido solamente una introducción al manejo de SEH al menos en C.
Si alguien tiene alguna duda o sugerencia con respecto a este artículo sería bueno que lo comente.
Como hago para evitar que al pedir un numero el usuario torpe me escriba “juanito” o al pedir el nombre el usuario me escriba “54321″
gracias al que me pueda ayudar