Sdílet prostřednictvím


Zvýšení výjimky Software

Některé nejběžnější zdroje chyby programu nebudou označeny jako výjimky v systému.Například pokud je pokus o přidělení paměti bloku, ale není dostatek paměti, spuštění nebo rozhraní API funkce nesmí vyvolat výjimku, ale vrátí kód chyby.

Však považovat všechny podmínky jako výjimku zjišťování této podmínky v kódu a podávání zpráv voláním RaiseException funkce.Tímto způsobem označíte příznakem chyby, můžete přenést výhody structured exception na jakýkoli druh Chyba spuštění zpracování.

Použití structured exception zpracování chyb:

  • Definujte vlastní kód výjimky pro událost.

  • Volání RaiseException při zjištění problému.

  • Zpracování výjimek filtry lze použijte k testování kód výjimky, které jste definovali.

WINERROR.H souboru zobrazuje formát pro kódy výjimku.Chcete-li se ujistit, že není definovat kód, který je v konfliktu s existující kód výjimky, nastavte třetí nejvýznamnější bit 1.Čtyři většinu významné bity je třeba nastavit podle následující tabulky.

Bity

Doporučené nastavení pro binární

Description

31-30

11

Tyto dva bity popisují základní stavový kód: 11 = chyba 00 = success 01 = informační, 10 = upozornění.

29

1

Bit klienta.Nastavte hodnotu 1 pro uživatelem definované kódy.

28

0

Vyhrazený bit.(Ponechat hodnotu 0).

Můžete nastavit první dva bity nastavení jiných než 11 binární Pokud chcete, přestože je vhodné pro většinu výjimky nastavení "Chyba".Je důležité si zapamatovat nastavení bitů 29 a 28 uvedené v předchozí tabulce.

Výsledný kód chyby by proto mít nejvyšší čtyři bity s hexadecimální E.Například následující definice definovat výjimky kódy, které nekolidují s jakékoli výjimky kódy systému Windows.(Může však musíte zkontrolovat kódy, které využívají jiných knihoven DLL.)

#define STATUS_INSUFFICIENT_MEM       0xE0000001
#define STATUS_FILE_BAD_FORMAT        0xE0000002

Po definování kód výjimky, můžete ji vyvolat výjimku.Následující kód například vyvolá výjimku STATUS_INSUFFICIENT_MEM v reakci na potíže s přidělováním paměti:

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

Pokud chcete jednoduše vyvolat výjimku, je poslední tři parametry nastavit na hodnotu 0.Poslední tři parametry jsou užitečné pro předání dalších informací a nastavení příznaku zabrání pokračováním spuštění obslužné rutiny.Najdete RaiseException fungovat Windows SDK Další informace.

Ve zpracování výjimek filtry potom můžete testovat pro kódy, které jste definovali.Příklad:

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

Viz také

Referenční dokumentace

Psaní popisovač výjimky

Structured Exception zpracování (C++)