Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.