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.