函数参考


_IEErrorHandlerRegister

注册并使用一个自定义COM错误处理程序.

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

参数

$s_functionName [可选参数]: 带有自定义COM错误处理程序名称的字符串变量, 在此UDF中默认为内部COM错误处理程序

返回值

成功: 返回-1
失败: 返回 0 并且设置 @ERROR
@Error: 0 ($_IEStatus_Success) = 无错误
1 ($_IEStatus_GeneralError) = 一般性错误
@Extended: 包含无效参数数量

注意/说明

重要: 当使用自己的错误处理程序时, 错误对象变量必须被命名为$oIEErrorHandler(见示例).

AutoIt有捕获COM错误的能力并使用ObjEvent函数传递自定义错误处理程序. 然而因为一次只能使用一个单独的COM错误处理程序所以对于使用它的UDF作者存在一个问题. 对于将使用一个COM错误处理程序的UDF, 必须先注销用户的错误处理程序, 安装其自身的并将用户错误处理程序原地返回. 不幸的是, UDF默认无法获取用户错误处理程序的句柄.

通过此程序你可以注册自己的COM错误处理程序, 同样的方法, 在需要时, IE.au3也可轻而易举的移除和重新注册. 你可以指定你自己的自定义错误处理程序也可以使用为IE.au3开发的(默认). 使用默认的IE.au3错误处理程序, 可以得到很好的写入控制台的诊断信息和一些包含关于捕捉到的错误的信息的全局变量.

如果你即时化你自己的COM错误处理程序而不使用该程序, IE.au3将无法捕捉一些COM错误, 其结果是你可能会遇到脚本中断.

如果你使用默认的错误处理程序(__IEInternalErrorHandler), 后续的全局变量可参考: $IEComErrorNumber, $IEComErrorNumberHex, $IEComErrorDescription, $IEComErrorScriptline, $IEComErrorWinDescription, $IEComErrorSource, $IEComErrorHelpFile, $IEComErrorHelpContext, $IEComErrorLastDllError, $IEComErrorComObj及$IEComErrorOutput

你可以使用_IEErrorNotify控制写入到控制台的COM错误消息的显示.

相关

_IEErrorHandlerDeRegister, _IEErrorNotify

示例/演示


; *******************************************************
; 示例 1 - 注册并在后来取消注册自定义和默认 IE.au3 错误处理程序
; *******************************************************

#include <IE.au3>

; 注册自定义错误处理程序
_IEErrorHandlerRegister("MyErrFunc")
; 执行一些操作
; 取消注册自定义错误处理程序
_IEErrorHandlerDeRegister()
; 执行其他操作
; 注册默认 IE.au3 COM 错误处理程序
_IEErrorHandlerRegister()
; 执行更多操作

Exit

Func MyErrFunc()
    ; 重要提示: 错误对象变量名称必须为 $oIEErrorHandler
    Local $ErrorScriptline = $oIEErrorHandler.scriptline
    Local $ErrorNumber = $oIEErrorHandler.number
    Local $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    Local $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    Local $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    Local $ErrorSource = $oIEErrorHandler.Source
    Local $ErrorHelpFile = $oIEErrorHandler.HelpFile
    Local $ErrorHelpContext = $oIEErrorHandler.HelpContext
    Local $ErrorLastDllError = $oIEErrorHandler.LastDllError
    Local $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