Manejant errors (només projectes visuals)
Per tal de tenir 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 (<Offset HandlerAddress>)
EndErrorHandler
StartErrorHandler inicia la comprovació d'errors, indicant l'adreça que rebrà el control quan es produeixi un error, mentre queEndErrorHandler finalitza la comprovació d'errors. La utilització d'aquestes macros és la següent:
AnyProcedure Proc
StartErrorHandler (Offset
ErrorsPlace)
codi.....
Exit:
EndErrorHandler
Ret
ErrorsPlace:
Cmp
D[Error.
Code],
0C0000005H;
Violació
d'accés de lectura
Jne
<
Exit
fer
alguna operació
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:
Cmp
D[uMsg],
WM_CREATE
Jne >
L2
StartErrorHandler
(Offset
ErrorsPlace1)
codi.....
Jmp
>
Exit1
ErrorsPlace1:
Cmp
D[Error.Code],
0C0000005H
;
Violació
d'accés de
lectura
Jne
>
Exit1
fer
alguna operació
Exit1:
EndErrorHandler
Jmp
>
End
L2:
Cmp
D[uMsg],
WM_DESTROY
Jne
>
Exit2
StartErrorHandler
(Offset
ErrorsPlace2)
codi.....
Jmp
>
Exit2
ErrorsPlace2:
Cmp
D[Error.Code],
0C0000005H
;
Violació
d'accés de
lectura
Jne
>
Exit2
fer
alguna operació
Exit2:
EndErrorHandler
End:
Return(TRUE)
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.