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.