VB 6.0 DLL中的错误处理

时间:2014-06-18 19:42:25

标签: dll vb6

我正在编写一个用于自动化Excel的DLL。我想建立一个广泛的错误处理模块。我无法弄清楚的是如何在错误上退出整个DLL。我不能在DLL中使用End语句。 Application.Quit也没有做任何事情。

如果我处于低级sub,并且我运行错误处理程序然后退出Sub,它将上升到另一个级别等。在.NET中有“例外”。 VB 6.0中有类似的东西吗?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然Plutonix所说的是真的,但是有一些类似于异常处理的东西也可以使用。您可以创建自己的vbObjectError,并通过错误处理机制将其提升到调用堆栈。

首先,在你的脑海中创造一些错误。最佳做法是使用添加了vbObjectError(一个非常大的负数)的数字,以免与本机VB错误发生冲突。然后,做这样的事情:

Public Sub MySub()
On Error Goto errHandle
'do  stuff
Exit Sub
errHandle:
Select Case Err.Number - vbObjectError
    Case 1
        'Do This
    Case 2
        'Do That
    Case 1000
        Err.Raise 1000 + vbObjectError, "Fatal Error, Really we Gotta Leave", _
        "My DLL"
End Select
End Sub

所以,我认为你在这一切中缺少的是,如果你在错误处理程序中引发错误,它会在调用proc中重新引发。如果你不断重新提出"退出错误"在所有错误处理程序中都是这样的,错误会冒出调用堆栈并最终进入客户端程序,即实例化DLL对象的程序。此时,您将退出DLL对象。在客户端对象的错误处理程序中,您可以根据需要清理对象引用等等。

答案 1 :(得分:1)

您不必处理低级别潜艇中的错误,因为VB会尽可能地向调用堆栈冒出错误(这与异常非常相似)。只有在最高级别没有错误时,程序才会崩溃。

Going down the call stack: Event > UI code > DLL code > Sub code (error occurs) 
Coming up the call stack: Sub error handler > DLL error handler > UI error handler > Crash

这就是说,只将错误处理程序放在最顶层是不好的做法,因为那时调试问题会更加困难。

由于DLL可以拥有一组有限的公共过程,因为它的界面(你没有让所有那些低级别的子公共做到了吗?)你可以在每个公共过程中放置​​一个错误处理程序,然后处理或提升根据需要出错。多年来,有几种常见的方法可以处理,不需要再次迭代,只需搜索“如何处理错误”或类似的东西。