【发布时间】:2011-03-07 04:18:29
【问题描述】:
我正在维护一个 vb6 项目(ActiveX DLL)。调试时,app运行如下函数:
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 IsNull(vValue) 或 Len(vValue) = 0 Then
vValue 是一个自定义对象,包含一些属性(显然,不为空)。
虽然我没有在此处放置任何断点,但应用程序停在那里并警告错误对话框说“运行时错误'438':对象不支持此属性或方法”。
我们有错误处理代码,但应用程序没有运行到错误处理代码。它只是停在导致错误的行,我不得不停止应用程序。
你对此有什么想法吗? 非常感谢。
【问题讨论】:
-
何:把
Or Len(vValue) = 0的部分去掉再试试。 -
关于这个问题的一些事情会混淆这个问题。 1.它使用
IsMissing,但vValue没有声明为Optional。IsMissing用于检测未传递给方法的Optional Variant参数。 2. 您的 cmets 说vValue是一个对象,但代码使用IsNull和Len对其进行测试。对象引用使用Is Nothing进行测试。这段代码是逐字发布的,还是被隐藏了? -
是的,代码是从我正在维护的应用程序中逐字复制的。我对开发人员实施的方式感到非常惊讶。无论如何,请忽略这里的逻辑。我只是想知道为什么该应用程序不会遇到错误处理代码。谢谢