На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Frame-based Exception Handling



A frame-based exception handler is a mechanism by which a developer deals with the possibility that an exception may occur in a certain sequence of code. A frame-based exception handler consists of the following elements.

· A guarded body of code
· A filter expression
· An exception-handler block



Frame-based exception handlers are declared in language-specific syntax. For example, in the Microsoft® C Optimizing Compiler, they are implemented by the try-except statement. For more information about the Microsoft C exception-handling syntax, see Syntax.
The guarded body of code is a set of one or more statements for which the filter expression and the exception-handler block provide exception-handling protection. The guarded body can be a block of code, a set of nested blocks, or an entire procedure or function. In Microsoft C, a guarded body is enclosed by braces ({}) following the try keyword.

The filter expression of a frame-based exception handler is an expression that is evaluated by the system when an exception occurs within the guarded body. This evaluation results in one of the following actions by the system.

· The system stops its search for an exception handler, restores the machine state, and continues thread execution at the point at which the exception occurred.
· The system continues its search for an exception handler.
· The system transfers control to the exception handler, and thread execution continues sequentially in the stack frame in which the exception handler is found. If the handler is not in the stack frame in which the exception occurred, the system unwinds the stack, leaving the current stack frame and any other stack frames until it is back to the exception handler's stack frame. Before an exception handler is executed, termination handlers are executed for any guarded bodies of code that terminated as a result of the transfer of control to the exception handler. For more information about termination handlers, refer to Termination Handling.



The filter expression can be a simple expression, or it can invoke a filter function that attempts to handle the exception. You can call the GetExceptionCode and GetExceptionInformation functions from within a filter expression to get information about the exception being filtered. GetExceptionCode returns a code that identifies the type of exception, and GetExceptionInformation returns a pointer to an EXCEPTION_POINTERS structure that contains pointers to CONTEXT and EXCEPTION_RECORD structures.

These functions cannot be called from within a filter function, but their return values can be passed as parameters to a filter function. GetExceptionCode can be used within the exception-handler block, but GetExceptionInformation cannot because the information it points to is typically on the stack and is destroyed when control is transferred to an exception handler. However, an application can copy the information to safe storage to make it available to the exception handler.

The advantage of a filter function is that it can handle an exception and return a value that causes the system to continue execution from the point at which the exception occurred. With an exception-handler block, in contrast, execution continues sequentially from the exception handler rather than from the point of the exception.
Handling an exception may be as simple as noting an error and setting a flag that will be examined later, printing a warning or error message, or taking some other limited action. If execution can be continued, it may also be necessary to change the machine state by modifying the context record. For an example of a filter function that handles a page fault exception, see Memory Management.

The UnhandledExceptionFilter function can be used as a filter function in a filter expression. It returns EXCEPTION_EXECUTE_HANDLER unless the process is being debugged, in which case it returns EXCEPTION_CONTINUE_SEARCH.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Фреймовая Исключительная Обработка



Фреймовый исключительный вручитель является механизмом, которым разработчик имеется дело с возможностью, что исключение может произойти в определенной последовательности кода. Фреймовый исключительный вручитель состоит из следующих элементов.

Охраняющее тело кода выражение фильтра блок исключительного вручителя



Фреймовые исключительные вручители объявлены в языковом-специфическом синтаксисе. Например, в Microsoft C, оптимизировавший Компилятор, они осуществлены попыткой-кроме утверждения. Более подробно об исключительной обработке синтаксиса Микрософт C, смотри Синтаксис.
Охраняющее тело кода - установка одного или более утверждений для которых выражение фильтра и блок исключительного вручителя обеспечивает исключительная обработка защиты. Охраняющее тело может быть блоком кода, установка вложенных блоков, или целой процедурой или функция. В Микрософт C, охраняющее тело приложено скобами ({}) следуя за пробовать ключевого слова.

Выражение фильтра фреймового исключительного вручителя является выражением, которое оценено системой когда исключение происходит в пределах охраняющего тела. Эта оценка заканчивается одним из следующих действий системой.

Система останавливает свой поиск исключительного вручителя, восстанавливает машинное состояние и продолжает выполнение резьбы на данном этапе в котором исключение происходило.
Система продолжает свой поиск исключительного вручителя.
Системное управление передач исключительному вручителю, и выполнение резьбы остается последовательно в фрейме стека в котором исключительный вручитель обнаружен. Если вручитель - не в фрейме стека в котором исключение происходило, система разворачивает стек, оставляющий текущий стек фреймовые и любые другие фреймы стека пока она не будет в фрейме стека исключительного вручителя. Прежде, чем исключительный вручитель будет выполнен, вручители завершения выполнены для любых охраняющих тел кода, который завершался в результате передачи управления исключительному вручителю. Более подробно о вручителях завершения, ссшлитесь на Обработку Завершения.



Выражение фильтра может быть простым выражением, или это может ввести функцию фильтра, которая пытается оперировать исключение. Вы можете назвать GetExceptionCode и функции GetExceptionInformation из выражения фильтра, чтобы получать информацию об исключении, фильтрованном. GetExceptionCode ВОЗВРАЩАЕТ код, который идентифицирует тип исключения, и GetExceptionInformation возвращает указатель в структуру EXCEPTION_POINTERS, которая содержит указателям в КОНТЕКСТ и структуры EXCEPTION_RECORD.

Эти функции не могут быть названы из функции фильтра, но их обратные величины могут быть пройдены как параметры в функцию фильтра. GetExceptionCode МОЖЕТ быть использован в пределах блока исключительного вручителя, но GetExceptionInformation не мочь поскольку информация, это указывается, чтобы - обычно в стеке и уничтожено когда управление передано исключительному вручителю. Тем не менее, приложение может скопировать информацию в безопасную память, чтобы делать это пригодным для исключительного вручителя.

Преимущество функции фильтра - то, что оно может прооперировать исключение и возвращать величину, которая заставляет систему, чтобы продолжать выполнение из точки в котором исключение происходило. С блоком исключительного вручителя, на контрасте, выполнение остается последовательно из исключительного вручителя а не из точки исключения.
Обработка исключения может быть такой же проста как напоминание ошибки и устанавливая флаг, который будет изучен последующим, печатая предупреждение или сообщение ошибки, или беря некоторое другое ограниченное действие. Если выполнение может остаться, оно может также быть необходимо изменять машинное состояние модифицируя контекстную запись. Для примера функции фильтра, который оперирует страничное дефектное исключение, смотри Управление Памяти.

Функция UnhandledExceptionFilter может быть использована как функция фильтра в выражении фильтра. Это возвращает EXCEPTION_EXECUTE_HANDLER если процесс не отлаживается, в этом случае это возвращает EXCEPTION_CONTINUE_SEARCH.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz