Manejant errors (només projectes visuals)
L'Easy Code disposa d'una rutina final per capturar les excepcions (errors) que es produeixen quan es crida una de les funcions de les seves llibreries visuals. Aquest tractament d'errors, però, només és efectiu quan el projecte ha estat generat en mode Debug (vegeu Propietats del projecte), i sempre que el fitxer dbghelp.dll es trobi al directori del sistema. Quan es produeix una excepció d'aquest tipus, apareix un quadre de diàleg on s'hi poden veure el codi i la descripció corresponents, i el nom de la finestra o mòdul, més el número de línia, que ha causat l'excepció.
Tot i així, per un control millor i més acurat, podeu manejar els errors a nivell de procediment (o fins i tot a nivell de missatge) amb aquestes dues macros:
StartErrorHandler <OffsetHandlerAddress>
EndErrorHandler
StartErrorHandler inicia la
comprovació d'errors, indicant l'adreça que
rebrà el control quan es produeixi un error, mentre
que EndErrorHandler
finalitza
la comprovació
d'errors. La utilització d'aquestes macros és la
següent:
AnyProcedure
Proc
StartErrorHandler
Offset
ErrorsPlace
.........
codi.....
.........
Exit:
EndErrorHandler
Ret
ErrorsPlace:
.If
Error.Code
==
0C0000005H ;Violació
d'accés de lectura
fer
alguna operació
.EndIf
Jmp Exit
AnyProcedure EndP
Aquesta
comprovació d'errors estarà activa al llarg de
tot
el codi que hi hagi entre les dues sentències
(StartErrorHandler
i
EndErrorHandler),
i
d'altres procediments que es cridin
des d'aquí dins (a menys que aquests altres procediments
tinguin la seva pròpia comprovació d'errors),
fins que
s'arribi a EndErrorHandler (a l'exemple, al final
del procediment). És molt important, per tal que
l'aplicació treballi correctament, que cada
StartErrorHandler
tingui
el seu corresponent EndErrorHandler
dins
del mateix nivell (habitualment al final
del procediment).
Encara
podeu acurar més
la comprovació d'errors. Per exemple:
.If
uMsg ==
WM_CREATE
StartErrorHandler
Offset
ErrorsPlace1
.........
codi.....
.........
Jmp
Exit1
ErrorsPlace1:
.If
Error.Code
==
0C0000005H
;Violació
d'accés de lectura
fer
alguna operació
.EndIf
Exit1:
EndErrorHandler
.ElseIf
uMsg ==
WM_DESTROY
StartErrorHandler
Offset
ErrorsPlace2
.........
codi.....
.........
Jmp
Exit2
ErrorsPlace2:
.If
Error.Code
==
0C0000005H ;Violació
d'accés de lectura
fer alguna
operació
.EndIf
Exit2:
EndErrorHandler
.EndIf
La
comprovació d'errors funciona igual que els codis
d'operació Push
i Pop.
Per
tant, com s'ha dit abans, heu d'escriure un
EndErrorHandler
per cada StartErrorHandler
dins
del mateix nivell (cal tenir en compte si el procediment té
dues o més sentències
Ret o Return), per tal que es
tregui
l'adreça de comprovació de la pila. Si no ho feu
així,
la propera vegada que l'execució del programa entri al
procediment per processar qualsevol altre missatge i es
produeixi un error, no funcionarà correctament.