调用过程中的 VB6 异常处理

标签 vb6 exception-handling

我有两个过程 procA 和 procB。 procA 正在调用 procB。 procB 中发生异常。我可以在 procB 中处理异常,但我喜欢在 procA 中处理它,这是我没有开始工作的。我对 VB6 不是很熟悉,但我认为这应该是可能的,因为 MSDN 说:

If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure's error handler can't handle the error. Control returns to the calling procedure. If the calling procedure has an enabled error handler, it is activated to handle the error.

我做错了什么?

现在是代码片段:

Private Sub procA()
  On Error GoTo ErrHnd
  ...
  procB obj
  Exit Sub
ErrHnd:
  MsgBox Err.Description, vbInformation, Me.caption
End Sub

Public Sub procB(ByRef rec As Object)
  On Error GoTo ErrHnd
  ... Exception occurs within DAO Recordset Operation
  Exit Sub
ErrHnd:
  Select Case Err.Number
  Case 3022
    Err.Raise vbObjectError + 9999, Err.Source, "Error Text"
  Case Else
    ...
  End Select
End Sub

我还尝试关闭 procB 中的异常处理(On Error Goto 0),但似乎 procA 从未获得异常。

感谢您的帮助。

编辑:附加信息:

  • 从 DAO.Recordset 对象引发异常。
  • 我还尝试完全删除 procB 中的异常处理,但没有效果。
  • procA 存在于另一个文件中,然后是 procB(data.cls、frmListArtikel.frm)。

解决方案: 我不知道程序的执行方式会有所不同。如果我从 IDE 启动它,异常不会被 procA 处理。如果我从 Explorer 启动 EXE(之前是从 IDE 生成的),则 procA 会根据需要处理异常。

最佳答案

您一次只能有一个事件的错误处理程序。如果您在 procb 中激活,procb 将处理。

您可能还需要检查您的编辑器设置。选择选项“工具 > 选项 > 常规选项卡”“中断类模块”

代码示例 1。您将在 procA 中收到错误 6:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    Err.Raise 6
End Sub

代码示例 2。您将在 procA 中收到错误 7:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    On Error GoTo errhan
    Err.Raise 6
errhan:
    Err.Raise 7
End Sub

关于调用过程中的 VB6 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388920/

相关文章:

c# - Java 设计器脚本项目在 VB6 到 C# 转换中的作用是什么?

c# - 通过将其导出为 .tlb 文件在 VB 6.0 中使用它时查找 C# dll 的命名空间

vb6 - 是否可以在没有括号的情况下调用 VB 函数?

scala - 在 Scala 2.7 的一个 case 语句中匹配(和绑定(bind))两个异常类?

c# - Windows 窗体 ComboBox 导致间歇性 System.AccessViolationException

c#-4.0 - 如何通过 COM 互操作使用 VB6 中的结构?

vb6 - 系统错误 &H80004015 (-2147467243)。该类被配置为作为不同于调用者的安全 ID 运行

c# - InvalidCastException Dictionary<string, string> 使用 Exception.Data

c# - 当这么多事情都可能出错时,你所做的就是尝试,尝试,尝试

ruby - 将异常处理作为 Ruby 中的常用方法