Dll VB6调试-不';不要转到错误处理代码

Dll VB6调试-不';不要转到错误处理代码,dll,vb6,activex,Dll,Vb6,Activex,我正在维护一个vb6项目(ActiveX DLL)。调试时,应用程序会运行以下功能: Public Function HasValue(ByVal vValue) As Boolean On Error GoTo Err If IsMissing(vValue) Then HasValue = False ElseIf IsNull(vValue) Or Len(vValue) = 0 Then HasValue = False

我正在维护一个vb6项目(ActiveX DLL)。调试时,应用程序会运行以下功能:

Public Function HasValue(ByVal vValue) As Boolean

    On Error GoTo Err

    If IsMissing(vValue) Then
        HasValue = False
    ElseIf IsNull(vValue) Or Len(vValue) = 0 Then
        HasValue = False
    ElseIf isEmpty(vValue) Then
        HasValue = False
    Else
        HasValue = True
    End If

Exit Function

Err:

    If IsArray(vValue) Or IsObject(vValue) Then
        HasValue = True
    Else
        HasValue = False
    End If
End Function
它停在终点线

ElseIf为空(vValue)或Len(vValue)=0,则

vValue是一个自定义对象,包含一些属性(显然不是null)

虽然我没有在那里放置任何断点,但应用程序在那里停止并警告错误对话框“运行时错误'438':对象不支持此属性或方法”

我们有错误处理代码,但应用程序没有运行到错误处理代码。它只是停在导致错误的那一行,我不得不停止应用程序

你知道吗?
非常感谢。

至于在调试器中运行弹出窗口,可能与IDE中的“错误捕获”设置有关。转到工具->选项->常规,查看“错误捕获”下选择的内容。乍一看,您的错误处理程序在发生错误时测试vValue似乎有些奇怪。基于我对该方法的有限理解,将IsArray和IsObject条件向上移动到主测试逻辑中对我来说更有意义。就我的2美分:)

据我所知,vb6在

 ElseIf IsNull(vValue) Or Len(vValue) = 0 Then
因此,即使
IsNull(vValue)
为真,也会执行
Len(vValue)=0

将代码更改为

...
ElseIf IsNull(vValue) Then
    HasValue = False
ElseIf Len(vValue) = 0 Then
    HasValue = False
ElseIf ...

可能会解决问题

Ho:删除零件
或Len(vValue)=0
,然后重试。关于此问题,有一些事情会混淆问题。1.它使用的是
IsMissing
,但
vValue
未声明为
可选
IsMissing
用于检测未传递给方法的
可选变量
参数。2.您的评论说
vValue
是一个对象,但代码使用
IsNull
Len
对其进行测试。对象引用是使用
为空测试的。这段代码是逐字发布的,还是被掩盖了?是的,代码是从我正在维护的应用程序中逐字复制的。我对开发人员实现的方式感到非常惊讶。无论如何,请忽略这里的逻辑。我只是想知道为什么应用程序没有遇到错误处理代码。谢谢您也可以通过在代码窗口中单击鼠标右键,然后查看弹出菜单上的“切换”项来检查错误捕获设置。