Вход


Главная страница >> Учебный процесс >> Конспекты >> MS Office. Руководство программиста по Visual Basic для MS Office 97 >> Отладка и обработка ошибок >> Обработка ошибок в объектах, на которые Вы ссылаетесь >> Обработка ошибок, переданных из внешних объектов

Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Обработка ошибок, переданных из внешних объектов


Модуль класса может включать обработчик, перехватывающий все ошибки и повторно генерирующий те из них, которые он не сумел обработать. *

MyServerHandler:
═════Select Case ErrNum
══════════Case 7 ══════════'
обрабатываем ошибку "нехватка памяти"
══════════Case 440 ═════'
обрабатываем ошибку во внешнем объекте
═══════════════Err. Raise Number := vbObjectError + 9999
══════════'
ошибка из другого объекта Visual Basic
══════════Case Is > vbObjectError and Is < vbObjectError + 65536
═══════════════ObjectError = ErrNum

═══════════════Select Case ObjectError
════════════════════?
обрабатываем ошибку, исходя из ее кода,
════════════════════?
задокументированного для данного объекта
════════════════════Case vbObjectError + 10
════════════════════.
════════════════════.
════════════════════.
════════════════════Case Else
═════════════════════════?
преобразуем ошибку в обобщенную и повторно генерируем ее
═════════════════════════Err. Raise Number := vbObjectError + 9999
═══════════════End Select

══════════Case Else
═══════════════?
преобразуем ошибку в обобщенную и повторно генерируем ее
═══════════════Err. Raise Nurnber:=vbObjectError + 9999
═════End Select
═════Err .Clear
═════Resume Next

Блок Case 440 перехватывает ошибки, возникающие во внешнем (вне Visual Basic) объекте. В этом примере ошибка под обобщенным номером 9999 просто передается следующему обработчику, поскольку в данном варианте централизованного обработчика трудно определить точную причину ошибки. Причиной может быть фатальная ошибка Автоматизации (заставившая компонент завершить свое выполнение) или некорректная обработка объектом перехваченной ошибки. Ошибку 440 нельзя передавать дальше, если только она не относится к числу фатальных. Если бы Вы написали на этот случай строчный обработчик (см. раздел ?Строчная обработка ошибок? ранее в этой главе), то причину ошибки можно было бы определить и устранить.

Блок Case Is > vbObjectError and Is < vbObjectError + 65536 * перехватывает ошибки, возникающие в объектах самого приложения или в объекте, содержащем данный обработчик. В документации на созданный Вами объект обязательно опишите возможные коды ошибок и их смысл, с тем чтобы этот блок обработчика мог корректно их обработать. Коды ошибок можно задокументировать как относительные значения (смещения от vbObjectError) или как абсолютные, включающие в себя значение vbObjectError. В последнем случае в блоке Case Else значение vbObjectError следует вычитать из кода ошибки, а не прибавлять. С другой стороны, ошибки объектов можно определить как константы в библиотеке типов конкретного объекта (тогда Вы увидите их в окне просмотра объектов). В таком случае в блоке Case Else используйте именно эти константы, а не коды ошибок.

Любую необработанную ошибку следует повторно генерировать под новым номером, как показано в блоке Case Else, а в своей программе Вы можете создать обработчик, ожидающий ошибку с этим номером. Если ошибка связана с открытым классом, включите ее описание в документацию на свою программу.

Последний блок Case Else перехватывает и повторно генерирует все ошибки, оставшиеся необработанными. Поскольку в этом случае не известно, входит ли в коды этих ошибок константа vbObjectError, следует просто преобразовать их в код обобщенной ошибки и суммировать его с vbObjectError, сообщив таким образом всем обработчикам, что эта ошибка возникла в объекте, на который ссылалась программа.



[Назад]    [Содержание ]    [Вперед]

  



Текст пособия подготовлен на основе материалов книги
Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл.
c Оригинальное издание на английском языке,
Microsoft Corporation, 1997
c Русский перевод,
Microsoft Corporation, 1997

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017