gpt4 book ai didi

vb6 - VB6 中的集中错误处理

转载 作者:行者123 更新时间:2023-12-04 23:10:11 24 4
gpt4 key购买 nike

我有以下所有错误处理程序调用的方法:

Public Function ToError(strClass As String, strMethod As String) As String

On Error GoTo errHandle

ToError = "Err " & Err.Number & _
", Src: " & Err.Source & _
", Dsc: " & Err.Description & _
", Project: " & App.Title & _
", Class: " & strClass & _
", Method: " & strMethod & _
", Line: " & Erl

Err.Clear

exitPoint:
Exit Function

errHandle:
oLog.AddToLog "Error in ToError Method: " & Err.Description, False
Resume exitPoint
End Function

事实证明,因为我在这个函数中声明了一个错误处理程序 On Error GoTo errHandle , VB6 在我能够记录之前清除错误。

有没有办法防止“On Error GoTo errHandle”语句清除错误?

最佳答案

一个 On Error语句将始终清除 Err变量(Erl 也将被重置为 0)。从理论上讲,这意味着您可以通过移动 On Error 来解决问题。 ToString = ... 下方的声明行(或完全删除 ToError 函数中的错误处理程序),但不幸的是,这也不一定总是有效。

项目引用的每个组件(DLL、ActiveX EXE 等)本质上都有自己的 Err内存中的实例。所以,如果你的 MainApp.exe引发一个错误并传递给 ToError (例如,位于单独的 ErrorHandling.dll 中),DLL 将看不到 Err您的 EXE 看到的变量。他们每个人都有自己的私有(private)Err变量。

我能想到的问题至少有两种方法:

方法一

Zian Choy mentions ,您可以将其他参数添加到您的 ToError函数,Err 的每个属性一个您需要访问的对象。

代码

Public Function ToError( _
ByVal strErrSource As String, _
ByVal nErrNumber As Long, _
ByVal sErrDescription As String, _
ByVal nLineNumber As Long) As String

使用示例

然后,您必须像这样从错误处理程序中这样调用,将当前 Err 中的所有相关值传递给它。对象,以及 Erl :
ToError Err.Source, Err.Number, Err.Description, Erl 

如果你也想要 App.Title ,您将不得不向 ToError 添加一个附加参数同样,因为 App.Title将等于 App.Title ToError 所在项目的方法是定义的,而不是引发错误的组件。这很重要,如果 ToError在另一个项目中。

方法二

你可以让你的 ToError通过传递 Err 调用更简洁一些对象本身作为函数的参数,但您的第一件事是 ToError在这种情况下,函数应该立即存储您需要的所有相关属性的副本,因为随后的 On Error语句将清除变量。

代码
Public Function ToError(ByVal oError As ErrObject, ByVal nLineNumber As Long) As String

'Copy the important Err properties first, '
'before doing anything else... '

Dim strErrSource As String
Dim nErrNumber As Long
Dim strErrDescription As String

strErrSource = oError.Source
nErrNumber = oError.Number
strErrDescription = oError.Description

On Error Goto errHandle

'More code here
'...

示例用法
ToError Err, Erl

关于vb6 - VB6 中的集中错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com