【问题标题】:Does the VB ErrorObject work with try/catch blocks or just onError/GoTo?VB ErrorObject 是与 try/catch 块一起使用还是仅与 onError/GoTo 一起使用?
【发布时间】:2014-09-03 15:32:17
【问题描述】:

在将 onError/GoTo 语句从 VB6 转换为 VB.Net 时,有人告诉我改用 try/catch 语句。大多数 VB6 错误块利用 Microsoft.VisualBasic.ErrObject 来提供错误代码和描述。例如:

 CombinePDF_ERROR:
        lErrorCode = Err
        strErrorSource = Err.Source
        strErrorDescription = Err.Description
        bInProcess = False
        strCombinePDFLastFile1 = strFile1
        strCombinePDFLastFile2 = strFile2
        ChDrive left$(strCurrentDir, 1)
        ChDir strCurrentDir
        Call CombinePDFUIUnload
        Err.Raise lErrorCode, strErrorSource, strErrorDescription
 End Sub

Err (Microsoft.VisualBasic.ErrObject) 是否从 onError/GoTo 语句中获取信息? lErrorCode、strErrorSource、strErrorDescription 在此之前没有给出值。如何在 try/catch 中复制此功能?捕获异常和messageBox 消息?第一次使用 VB6 或 VB.Net。感谢您的宝贵时间。

【问题讨论】:

  • 我们看不到可能导致错误的代码,这使得这个非常非常广泛。 These guys 了解 Try/Catch,从这里开始
  • VB 'Err' 对象和以 'On Error' 或 'Resume' 开头的 pre-.NET 错误处理语句存在于它们自己的小世界中,与结构化异常处理不兼容(VB 赢得了'甚至不允许你在同一个方法中包含这两种类型)。避免传统的 VB 错误处理,并通过结构化异常处理重现您需要的内容。
  • source for Microsoft.VisualBasic.ErrObject 提供了一些翻译线索以及异常如何映射到“经典”VB 错误。

标签: vb.net vb6 vb6-migration


【解决方案1】:

您问题中的特定代码基本上就像下面的这个 Catch 块。 Err.Raise 相当于一个 Throw,Err 对象大致相当于一个 Exception 对象。

Catch ex
  bInProcess = False
  strCombinePDFLastFile1 = strFile1 
  strCombinePDFLastFile2 = strFile2
  ChDrive left$(strCurrentDir, 1)
  ChDir strCurrentDir 
  Call CombinePDFUIUnload
Throw ex

但这只是一个街区。您需要检查每个 VB6 错误处理程序,弄清楚它在做什么,并使用 Try Catch 计算出最接近的等价物。您需要了解 VB6 On Error 和 Err 对象,以及 .Net Try...Catch 和 Exception 对象。

如果您不了解 VB6 或 VB.Net,您将很难在这个项目上度过难关。

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 2019-05-27
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多