Udostępnij przez


składnia Exception-Handler

Słowa kluczowe __try i __except służą do konstruowania procedury obsługi wyjątków opartej na ramce. W poniższym przykładzie przedstawiono strukturę programu obsługi wyjątków.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Należy pamiętać, że blok __try i blok obsługi wyjątków wymagają nawiasów klamrowych ({}). Używanie instrukcji goto w celu przeskoczenia do treści bloku __try lub do bloku obsługi wyjątków jest niedozwolone. Ta reguła ma zastosowanie zarówno do programów obsługi wyjątków, jak i procedur obsługi zakończenia.

Blok __try zawiera chronioną treść kodu, który chroni program obsługi wyjątków. Funkcja może mieć dowolną liczbę procedur obsługi wyjątków, a te instrukcje obsługi wyjątków mogą być zagnieżdżone w ramach tej samej funkcji lub w różnych funkcjach. Jeśli wyjątek występuje w bloku __try, system przejmuje kontrolę i rozpoczyna wyszukiwanie procedury obsługi wyjątków. Aby uzyskać szczegółowy opis tego wyszukiwania, zobacz Obsługa wyjątków.

Procedura obsługi wyjątków odbiera tylko wyjątki występujące w jednym wątku. Oznacza to, że jeśli blok __try zawiera wywołanie CreateProcess lub funkcji CreateThread, wyjątki występujące w ramach nowego procesu lub wątku nie są wysyłane do tej procedury obsługi.

System ocenia wyrażenie filtru każdego programu obsługi wyjątków chroniącego kod, w którym wystąpił wyjątek, dopóki wyjątek nie zostanie obsłużony lub nie ma więcej procedur obsługi. Wyrażenie filtru musi być oceniane jako jedna z trzech następujących wartości.

Wartość Znaczenie
EXCEPTION_EXECUTE_HANDLER System przekazuje kontrolę do programu obsługi wyjątków, a wykonanie jest kontynuowane w ramce stosu, w której znaleziono procedurę obsługi.
EXCEPTION_CONTINUE_SEARCH System nadal wyszukuje program obsługi.
EXCEPTION_CONTINUE_EXECUTION System zatrzymuje wyszukiwanie programu obsługi i zwraca kontrolę do punktu, w którym wystąpił wyjątek. Jeśli wyjątek jest niekontynuowalny, powoduje to wystąpienie wyjątku EXCEPTION_NONCONTINUABLE_EXCEPTION.

 

Wyrażenie filtru jest oceniane w kontekście funkcji, w której znajduje się program obsługi wyjątków, mimo że wyjątek mógł wystąpić w innej funkcji. Oznacza to, że wyrażenie filtru może uzyskać dostęp do zmiennych lokalnych funkcji. Podobnie blok obsługi wyjątków może uzyskać dostęp do zmiennych lokalnych funkcji, w której się znajduje.

Aby uzyskać więcej przykładów, zobacz Using an Exception Handler.

Aby uzyskać więcej informacji na temat wyrażeń filtrów i funkcji filtrowania, zobacz Obsługa wyjątków na podstawie ramek.