Функция _WordErrorHandlerRegister

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


_WordErrorHandlerRegister

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

#include <Word.au3>
_WordErrorHandlerRegister([$s_functionName = "__WordInternalErrorHandler"])

Параметры

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

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

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

Примечания

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

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

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

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

См. также

_WordErrorHandlerDeRegister

Пример

; *******************************************************
; Пример 1 - Register and later deregister a custom and the default Word.au3 error handler
; *******************************************************

#include <Word.au3>
; Register a customer error handler
_WordErrorHandlerRegister ("MyErrFunc")
; Do something
; Deregister the customer error handler
_WordErrorHandlerDeregister ()
; Do something else
; Register the default IE.au3 COM Error Handler
_WordErrorHandlerRegister ()
; Do more work

Exit

Func MyErrFunc()
    ; Important: the error object variable MUST be named $oWordErrorHandler
    $ErrorScriptline = $oWordErrorHandler.scriptline
    $ErrorNumber = $oWordErrorHandler.number
    $ErrorNumberHex = Hex($oWordErrorHandler.number, 8)
    $ErrorDescription = StringStripWS($oWordErrorHandler.description, 2)
    $ErrorWinDescription = StringStripWS($oWordErrorHandler.WinDescription, 2)
    $ErrorSource = $oWordErrorHandler.Source
    $ErrorHelpFile = $oWordErrorHandler.HelpFile
    $ErrorHelpContext = $oWordErrorHandler.HelpContext
    $ErrorLastDllError = $oWordErrorHandler.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