Ang*_*ker 4 vb6 error-handling
我有以下所有错误处理程序调用的方法:
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
Run Code Online (Sandbox Code Playgroud)
事实证明,因为我在这个函数中声明了一个错误处理程序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看到的变量.它们每个都有自己的私有Err变量.
我能想到的问题至少有两种解决方法:
正如Zian Choy所提到的,您可以为ToError函数添加其他参数,一个参数用于Err您需要访问的对象的每个属性.
码
Public Function ToError( _
ByVal strErrSource As String, _
ByVal nErrNumber As Long, _
ByVal sErrDescription As String, _
ByVal nLineNumber As Long) As String
Run Code Online (Sandbox Code Playgroud)
用法示例
然后你必须从你的错误处理程序中调用这样的方法,从当前Err对象传递所有相关的值,以及Erl:
ToError Err.Source, Err.Number, Err.Description, Erl
Run Code Online (Sandbox Code Playgroud)
如果你也想要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
'...
Run Code Online (Sandbox Code Playgroud)
示例用法
ToError Err, Erl
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |