是这样,我在写个DLL,调用一个类模块的一些函数。在类模块中,有些错误捕获直接使用Err.Raise语句弹出错误提示。而我希望在我的DLL中只是根据公开函数的返回值来判断本函数是否成功完成调用。
而不需要对用户使用时弹出这个错误。当然,我可以把类模块中的这些Err.Raise语句删除或屏蔽掉。
但原因一是模块比较繁杂,有些地方的基本捕获我是要保留的,所以不能一次型替换来屏蔽;
原因二也是比较重要的,我并不想破坏这个类的完整性,毕竟错误捕获是有必要的,我只是在这个工程里才不希望出现,而将其用于其他工程时我还是希望保留的。所以我想问问前辈,有没办法在我DLL的函数里加入什么语句,使类模块中Err.Raise语句不弹出呢??
我尝试过那些On Error GoTo/On Error Resume Next/On Error GoTo 0,都不好使。。
并且我对这些错误处理程序的解释读来读去都理解的比较模糊。希望我表达明白我的意思,先谢谢前辈们了!!!

解决方案 »

  1.   

    on error goto 表示当出现错误时直接运行某一个设定的代码
    on error resume next 表示出现错误时不弹出提示框,直接跳过
      

  2.   

    最好用
    on error goto 
    在goto 语句里面用 resume next 跳过,并且用err.clear清掉
      

  3.   

    并不好用哦:
    Public Function MYFunction(ByVal X As Long) As Long
    On Error GoTo Error_Handler
        ……
        NewClass.SomeFunction XX,YY……
        ……
    Error_Handler:
        Err.Clear
    End Function其中NewClass是一个我所调用的类模块,其中的函数SomeFunction 中有错误捕获处理的:
    Err.Raise lngErrorCode, strSource, strErrorDesc 类似这样的语句类似上面这样一个我自定义的函数,如果不发生错误则没啥,可一出错还是会出现错误提示
    我理解上,上面虽然设置了:出现错误转到 Error_Handler。可在错误刚发生还没开始转向的时候
    NewClass类模块里的 Err.Raise 已经开始了。。应该就是这个原因吧。。怎么才可以屏蔽掉呢。。郁闷。
      

  4.   

    代码编辑器->右键菜单->切换->选中"遇到未处理的错误时中断"
    可在IDE菜单->工具->选项->通用->错误捕获 中设置它的默认值.
      

  5.   


    确实好用!不过看了看学习资料还是有点模糊的地方:
    P “发生错误时中断”:任何错误都将导致工程进入中断模式——不管错误处理器是否是活动的,也不管代码是否在类模块内。
    P “在类模块内中断”:在类模块中产生的任何未处理的错误,都将导致工程在类模块中产生该错误的代码行进入中断模式。当通过在另一个工程中运行一个ActiveX客户测试程序调试一个ActiveX部件工程时,可以在ActiveX部件工程中设置该选项,使其在类模块中出错时立即中断,而不会总是向客户测试程序返回错误信息。
    P “遇到未处理的错误时中断”:如果错误处理器是活动的,那么该错误用不着进入中断模式就能被捕获。如果没有活动的错误处理器,那么错误就会导致工程进入中断模式。然而,类模块中未经处理的错误,将导致工程在调用该类未结束过程的代码行上进入中断模式。晕,讲的真不够直白的
    我想明白的是:这么处理,我在开发调试的期间确实是不弹出错误提示了。但这并不是主要目的(其实对于开发者而言,它弹出这些提示倒是好事情,便于知道如何修改有问题的地方哦)。关键的是我希望编译之后,使用者在进行了一个错误操作时他/她不会见到错误提示,而是可以根据我函数的返回信息来判断就可以了。所以我想问下:这么设置,对于编译后DLL的使用者也不会收到错误提示吗?
      

  6.   


    这样有点“自欺欺人”的感觉,且效果并不太好。
    为什么不用返回值来处理错误信息呢?
    Public Function funXX (byval strX as String) as Integer
    on error goto errX
        funXX=-1
        ....
        代码执行正确后
        funXX=0 
    errX:
       If Err.Number<>0 Then
          funXX=-1
       End If   
    也请高手来指教。
      

  7.   


    不是这样的6楼的大哥。
    你这个例子跟我在3楼的流程是一样的。。可在“....代码执行正确后”这个过程里,我调用了类模块的一个公开函数。。
    并且在这个公开函数里人家写明了错误捕获,当错误发生时类模块会 Err.Raise 出错误提示。。
    所以象你给的这个流程里,一旦出错,虽然有“on error goto errX”,可还没等转到errX,人家的错误已经弹出来了。。
    而根本到不了。errX
      

  8.   

    如果选择 遇到未处理错误时中断 还是会中断的话,就说明此错误在DLL内部没有被处理,此时会上抛错误到dll的宿主程序.
    否则如果发生错误时没有中断,那么运行时刻也是不会中断的,所以说这个选项的效果和运行时刻是一致的.
    您可以试试:)这个在类模块内中断我也不太清楚是什么意思,我一般只用发生错误时中断和遇到未处理错误时中断这两个选项.
    发生错误时中断,这个选项用于查找最初发生错误得位置,中断后可以使用ALT+F8单步跟踪错误的处理过程.
      

  9.   


    楼主,On Error 语句的有效范围就是本过程(函数),不能控制子过程(函数)。不是来得及来不及的问题。
      

  10.   


    貌似明白了,行,这个问题到这里吧。感谢各位。感谢sonic_andy!