VB6:Dos";错误转到“0”时;是否影响调用函数的错误处理程序?
如果在VB6子系统中调用了关于错误转到0的VB6:Dos";错误转到“0”时;是否影响调用函数的错误处理程序?,vb6,error-handling,Vb6,Error Handling,如果在VB6子系统中调用了关于错误转到0的,,那么即使控件返回到调用函数/Sub,是否也会关闭错误处理 编辑:如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?否 当程序遇到错误时,Visual Basic 检查当前是否安装了错误处理程序 在当前的例行程序中。如果是这样,控制传递给该错误处理程序。 如果没有有效的错误处理程序,则Visual Basic将移动 将调用堆栈升级到调用例程,查看 错误处理程序当前安装在那里。如果是,, 系统将在该错误处理程序处恢复执行。 如果调用例程中
,,那么即使控件返回到调用函数/Sub,是否也会关闭错误处理
编辑:如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?否
当程序遇到错误时,Visual Basic
检查当前是否安装了错误处理程序
在当前的例行程序中。如果是这样,控制传递给该错误处理程序。
如果没有有效的错误处理程序,则Visual Basic将移动
将调用堆栈升级到调用例程,查看
错误处理程序当前安装在那里。如果是,,
系统将在该错误处理程序处恢复执行。
如果调用例程中未安装错误处理程序
或者,VisualBasic继续向上移动调用堆栈
直到找到安装了错误处理程序的例程。
如果它在找到一个
激活错误处理程序后,程序崩溃。
否。错误转到0时的仅影响当前过程:
出错时转到0
禁用任何已启用的
当前数据库中的错误处理程序
程序
编辑现在这个问题增加了一个选项,我发布这个答案时没有。问题是“如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?”。有关答案,请参阅
如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么
这意味着Err
对象在您检查Err.Number
属性的代码点不包含错误信息。发生这种情况的原因有很多:
- 先前调用
Err.Clear
- 通过调用错误转到时的
清除Err
对象。On Error Goto
语句将清除当前的Err
对象
Err
对象被Resume X
语句清除。与正常的Goto X
语句不同,Resume
将清除当前的Err
对象(如果Err
对象已为空,则会引发自身的错误)
- 在到达错误处理程序之前,您忘记退出当前的
子
/函数
/属性
,例如:
Public Sub SampleRoutine
On Error Goto ErrorHandler
DoSomething
DoSomethingElse
' You need an Exit Sub here so that the code does not reach the error handler'
'in the event no error occurs.'
ErrorHandler:
MsgBox Err.Number & "-" & Err.Description
End Sub
根据我的经验,这是一个相当常见的错误。如果在到达错误处理程序标签之前没有显式退出例程,则即使没有发生错误,错误处理程序中的代码仍将运行。在这种情况下,Err.Number
将是0,因为没有发生错误。您的引用是正确的,但它实际上没有回答问题。答案是“否”,引用只是一种解释(基本上,错误处理程序的范围是一个过程,所有被调用的过程都没有安装自己的错误处理程序)。但我认为这句话说得更好。。。
Public Sub SampleRoutine
On Error Goto ErrorHandler
DoSomething
DoSomethingElse
' You need an Exit Sub here so that the code does not reach the error handler'
'in the event no error occurs.'
ErrorHandler:
MsgBox Err.Number & "-" & Err.Description
End Sub