Manejando errores (sólo proyectos visuales)


Easy Code dispone de una rutina final para capturar las excepciones (errores) que se producen cuando se llama a una de las funciones de sus librerías visuales. Ese tratamiento de errores, pero, sólo es efectivo cuando el proyecto ha sido generado en modo Debug (vea Propiedades del proyecto), y siempre que el archivo dbghelp.dll se encuentre en el directorio del sistema. Cuando se produce una excepción de ese tipo, aparece un cuadro de diálogo donde se pueden ver el código y la descripción correspondientes, y el nombre de la ventana o módulo, más el número de linea, que ha causado la excepción.

Aun así, para un control mejor y mas preciso, puede manejar los errores a nivel de procedimiento (o incluso a nivel de mensaje) con estas dos macros:

    StartErrorHandler <Offset HandlerAddress>

    EndErrorHandler


StartErrorHandler
inicia la comprobación de errores, indicando la dirección que recibirá el control cuando se produzca un error, mientras que EndErrorHandler finaliza la comprobación de errores. La utilización de estas macros es la siguiente:

AnyProcedure Proc
    StartErrorHandler Offset ErrorsPlace
    .........
    código...
    .........
Exit
:
    EndErrorHandler
    Ret

ErrorsPlace:
    .If Error.Code == 0C0000005H ;Violación de acceso de lectura
        hacer alguna operación
    .EndIf
    Jmp
Exit
AnyProcedure EndP

Esta comprobación de errores estará activa a lo largo de todo el código que haya entre las dos sentencias (StartErrorHandler y EndErrorHandler), y otros procedimientos que se llamen desde aquí (a menos que estos otros procedimientos tengan su propia comprobación de errores), hasta que se llegue a EndErrorHandler (en el ejemplo, al final del procedimiento). Es muy importante, para que la aplicación trabaje correctamente, que cada StartErrorHandler tenga su correspondiente EndErrorHandler dentro del mismo nivel (habitualmente al final del procedimiento).

Todavía puede precisar mas la comprobación de errores. Por ejemplo:

    .If uMsg == WM_CREATE
        StartErrorHandler Offset ErrorsPlace1
        .........
    
    código...
        .........
        Jmp
Exit1

ErrorsPlace1:
        .If Error.Code == 0C0000005H ;Violación de acceso de lectura
            hacer alguna operación
        .EndIf

Exit1:
        EndErrorHandler

    .ElseIf uMsg == WM_DESTROY
        StartErrorHandler Offset ErrorsPlace2
        .........
        código...
        .........
        Jmp Exit2

ErrorsPlace2:
        .If Error.Code == 0C0000005H ;Violación de acceso de lectura
            hacer alguna operación
        .EndIf

Exit2:
        EndErrorHandler
    .EndIf

La comprobación de errores funciona igual que los códigos de operación Push y Pop. Por lo tanto, como se ha dicho antes, debe escribir un EndErrorHandler por cada StartErrorHandler dentro del mismo nivel (hay que tener en cuenta si el procedimiento tiene dos o más sentencias Ret o Return), para que se quite la dirección de comprobación de la pila. Si no lo hace así, la próxima vez que la ejecución del programa entre en el procedimiento para procesar cualquier otro mensaje y se produzca un error, no funcionará correctamente.