Функция _IEErrorHandlerRegister

 ↑  ←  Описание функции


_IEErrorHandlerRegister

Регистрация и включение пользовательского обработчика COM ошибок

#include <IE.au3>
_IEErrorHandlerRegister([$s_functionName = "__IEInternalErrorHandler"])

Параметры

$s_functionName [необязательный] Строковая переменная с именем функции определяемой пользователем COM обработчика ошибок, по умолчанию используется внутренний обработчик COM ошибок этой UDF

Возвращаемое значение

Успех:Возвращает 1
Ошибка:Возвращает 0 и устанавливает @error
@error:0 ($_IEStatus_Success) = Нет ошибок
1 ($_IEStatus_GeneralError) = Общая ошибка
@extended:Содержит номер неверного параметра

Примечания

Важно: При использовании собственного обработчика ошибок, используемая переменная объекта ошибки ДОЛЖНА быть названа $oIEErrorHandler (см. пример).

AutoIt имеет способность перехватывать COM ошибки и передавать их через пользовательский обработчик ошибок используя функцию ObjEvent. Однако с этим есть проблема для разработчиков UDF, поскольку только один обработчик COM ошибок может использоваться в одно и тоже время. Для UDF, чтобы использовать обработчик COM ошибок, он должен вначале отменить регистрацию пользовательского обработчика ошибок, назначить свой, а затем возвратить пользовательский обработчик ошибок на место. К сожалению по умолчанию, UDF не имеет возможности доступа к дескриптору пользовательского обработчика ошибок.

С помощью этой процедуры вы можете зарегистрировать собственный обработчик COM ошибок, таким способом, что IE.au3 может изящно удалить и восстановить при необходимости. Вы можете указать собственный обработчик ошибок или использовать разработанный для IE.au3 (по умолчанию). Используя обработчик ошибок по умолчанию (в IE.au3) вы также получите несколько хорошей диагностической информации выводимой в консоль и некоторые глобальные переменные, которые содержат данные о перехваченных ошибках.

Если вы реализуете собственный обработчик COM ошибок без использования процедуры в IE.au3, то вы не сможете перехватить некоторые COM ошибки и в результате можете получить внезапное завершение скрипта.

Если вы используете обработчик ошибок по умолчанию (__IEInternalErrorHandler), то следующие глобальные переменные будут установлены для ссылки: $IEComErrorNumber, $IEComErrorNumberHex, $IEComErrorDescription, $IEComErrorScriptline, $IEComErrorWinDescription, $IEComErrorSource, $IEComErrorHelpFile, $IEComErrorHelpContext, $IEComErrorLastDllError, $IEComErrorComObj and $IEComErrorOutput
Вы можете контролировать отображение сообщений о COM ошибках в консоли с помощью _IEErrorNotify().

См. также

_IEErrorHandlerDeRegister, _IEErrorNotify

Пример

#include <IE.au3>

; Пример 1 - Регистрирует и позже отменяет регистрацию пользовательского обработчика ошибок IE.au3 по умолчанию

; Регистрирует пользовательский обработчик ошибок
_IEErrorHandlerRegister("MyErrFunc")
; ... Что-то сделать
; Отменяет регистрацию пользовательского обработчика ошибок
_IEErrorHandlerDeRegister()
; ... Сделать что-нибудь другое
; Регистрирует обработчик COM ошибок, который по умолчанию
_IEErrorHandlerRegister()
; Делать дальнейшую работу

Exit

Func MyErrFunc()
    ; Важно: переменная объекта ошибки ДОЛЖНА называться $oIEErrorHandler
    $ErrorScriptline = $oIEErrorHandler.scriptline
    $ErrorNumber = $oIEErrorHandler.number
    $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    $ErrorSource = $oIEErrorHandler.Source
    $ErrorHelpFile = $oIEErrorHandler.HelpFile
    $ErrorHelpContext = $oIEErrorHandler.HelpContext
    $ErrorLastDllError = $oIEErrorHandler.LastDllError
    $ErrorOutput = ""
    $ErrorOutput &= "--> COM Error Encountered in " & @ScriptName & @CR
    $ErrorOutput &= "----> $ErrorScriptline = " & $ErrorScriptline & @CR
    $ErrorOutput &= "----> $ErrorNumberHex = " & $ErrorNumberHex & @CR
    $ErrorOutput &= "----> $ErrorNumber = " & $ErrorNumber & @CR
    $ErrorOutput &= "----> $ErrorWinDescription = " & $ErrorWinDescription & @CR
    $ErrorOutput &= "----> $ErrorDescription = " & $ErrorDescription & @CR
    $ErrorOutput &= "----> $ErrorSource = " & $ErrorSource & @CR
    $ErrorOutput &= "----> $ErrorHelpFile = " & $ErrorHelpFile & @CR
    $ErrorOutput &= "----> $ErrorHelpContext = " & $ErrorHelpContext & @CR
    $ErrorOutput &= "----> $ErrorLastDllError = " & $ErrorLastDllError
    MsgBox(4096, "COM Error", $ErrorOutput)
    SetError(1)
    Return
EndFunc   ;==>MyErrFunc