Controlant les excepcions (només projectes visuals)
L'Easy Code pot crear un control d'erros per capturar les excepcions que es produeixen durant l'execució del programa, de manera que podeu manejar els errors a nivell de procediment (o fins i tot a nivell de missatge) amb aquestes dues macros:
StartErrorHandler <Offset HandlerAddress>
EndErrorHandler
StartErrorHandler
indica l'inici del control d'errors, especificant l'adreça
efectiva que rebrà
el control quan es produeixi un error, mentre que EndErrorHandler
indica que s'ha arribat a la fi del
control d'errors. Podeu aquestes dues macros de la manera
següent:
AnyProcedure
Proc
StartErrorHandler Offset
ErrorsPlace
.........
codi.....
.........
EndErrorHandler
@@: Ret
ErrorsPlace:
EndErrorHandler
.If
Error.lCode
==
0C0000005H ;Violació
d'accés de lectura
do something
.EndIf
Jmp
@B
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.....
.........
EndErrorHandler
@@: Ret
ErrorsPlace1:
EndErrorHandler
.If
Error.lCode
==
0C0000005H
;Violació
d'accés de lectura
do something
.EndIf
Jmp @B
.ElseIf
uMsg ==
WM_DESTROY
StartErrorHandler
Offset
ErrorsPlace2
.........
codi.....
.........
EndErrorHandler
@@: Ret
ErrorsPlace2:
EndErrorHandler
.If
Error.lCode
==
0C0000005H
;Violació
d'accés de lectura
do something
.EndIf
Jmp @B
.EndIf
Aquesta comprovació d'errors no pot ser recursiva, 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.
OBSERVACIONS:
Tot el codi mostrat anteriorment
ha estat escrit amb la sintaxi del Masm.
Caldrà fer les modificacions
necessàries per altres assembladors.