Condividi tramite


Generare eccezioni del software

Alcuni dei database di origine più comuni degli errori di programma non sono contrassegnati come eccezioni dal sistema.Ad esempio, se si tenta di allocare un blocco di memoria ma vi è memoria insufficiente, il runtime o la funzione API non genera un'eccezione ma restituisce un codice di errore.

Tuttavia, è possibile trattare le condizioni come eccezione rileva che la condizione nel codice e quindi riferendolo chiamando RaiseException funzione.Contrassegnando gli errori in questo modo, è possibile aggiornare i vantaggi di gestione delle eccezioni strutturata a qualsiasi tipo di errore di runtime.

Per utilizzare gestione delle eccezioni strutturata con errori:

  • Definire possiedono il codice dell'eccezione per l'evento.

  • chiamata RaiseException quando viene rilevato un problema.

  • I filtri per utilizzare la gestione delle eccezioni da verificare l'eccezione viene illustrato il codice definito.

Il file del file WINERROR.H mostra il formato per i codici di eccezione.Per assicurarsi che non definire un codice che non sia in conflitto con un codice esistente di eccezione, impostare il terzo la maggior parte di bit significativo su 1.I quattro bit più-significativi devono essere impostati come illustrato nella tabella seguente.

Bit

impostazione binaria consigliata

Descrizione

31-30

11

Questi due bit descrivono lo stato di base del codice: 11 = errore, 00 = esito positivo, 01 = informativo, 10 = avviso.

29

1

bit client.Impostare su 1 per i codici definiti dall'utente.

28

0

bit riservato.(Lasciare impostato su 0.)

È possibile impostare i primi due bit in un'impostazione diversa dal binario 11 se si desidera, sebbene l'impostazione “di errore„ sia appropriato per la maggior parte delle eccezioni.L'operazione importante ricordare è possibile impostare i bit 29 e 28 come illustrato nella tabella precedente.

Il codice di errore risultante deve quindi essere disponibili quattro bit più elevati impostati esadecimale E.Ad esempio, le seguenti definizioni definiscono i codici di eccezione che non entrino in conflitto con alcuni codici di eccezione di windows.(È possibile, tuttavia, essere necessario controllare che i codici utilizzati dalle DLL di terze parti.)

#define STATUS_INSUFFICIENT_MEM       0xE0000001
#define STATUS_FILE_BAD_FORMAT        0xE0000002

Dopo aver definito un codice dell'eccezione, è possibile utilizzarlo per generare un'eccezione.Ad esempio, il codice seguente genera l'eccezione di STATUS_INSUFFICIENT_MEM in risposta a un problema di allocazione della memoria:

lpstr = _malloc( nBufferSize );
if (lpstr == NULL)
    RaiseException( STATUS_INSUFFICIENT_MEM, 0, 0, 0);

Se si desidera generare semplicemente un'eccezione, è possibile impostare gli ultimi tre parametri a 0.I tre ultimi parametri sono utili per comunicare le informazioni aggiuntive e impostare un flag che impedisce i gestori dell'esecuzione continua.vedere RaiseException funzione in Windows SDK per ulteriori informazioni.

Nei filtri di gestione delle eccezioni, è quindi possibile testare i codici definito.Di seguito è riportato un esempio:

__try {
    ...
}
__except (GetExceptionCode() == STATUS_INSUFFICIENT_MEM ||
        GetExceptionCode() == STATUS_FILE_BAD_FORMAT )

Vedere anche

Riferimenti

Scrittura di un gestore eccezioni

Gestione delle eccezioni strutturata (C++)