Dll VB6调试-不';不要转到错误处理代码
我正在维护一个vb6项目(ActiveX DLL)。调试时,应用程序会运行以下功能: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
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
对其进行测试。对象引用是使用为空测试的。这段代码是逐字发布的,还是被掩盖了?是的,代码是从我正在维护的应用程序中逐字复制的。我对开发人员实现的方式感到非常惊讶。无论如何,请忽略这里的逻辑。我只是想知道为什么应用程序没有遇到错误处理代码。谢谢您也可以通过在代码窗口中单击鼠标右键,然后查看弹出菜单上的“切换”项来检查错误捕获设置。