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.