Отладка VB6 - не идет к коду обработки ошибок - PullRequest
2 голосов
/ 07 марта 2011

Я поддерживаю проект 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 IsNull (vValue) или Len (vValue) = 0 Тогда

vValue - это пользовательский объект, содержащий некоторые свойства (очевидно, не нуль).

Хотя я не ставил там точку останова, приложение остановилось на этом месте и предупредило об ошибке, сообщив, что «Ошибка времени выполнения« 438 »: объект не поддерживает это свойство или метод».

У нас был код обработки ошибок, но приложение не работало с кодом обработки ошибок. Он просто остановился на линии, вызвавшей ошибку, и мне пришлось остановить приложение.

У вас есть идеи по этому поводу? Большое спасибо.

Ответы [ 2 ]

6 голосов
/ 07 марта 2011

Что касается запуска всплывающего окна в отладчике, оно, вероятно, связано с вашими настройками «Перехват ошибок» в среде IDE. Перейдите в Инструменты-> Параметры-> Общие и посмотрите, что выбрано в разделе «Перехват ошибок». На первый взгляд кажется странным, что ваш обработчик ошибок тестирует vValue в случае ошибки. Для меня более логично, исходя из моего ограниченного понимания этого метода, перенести условия IsArray и IsObject в основную логику тестирования. Просто мои 2 цента :) 1001 *

0 голосов
/ 16 марта 2011

Насколько я знаю, vb6 не поддерживает логическая краткая оценка в

 ElseIf IsNull(vValue) Or Len(vValue) = 0 Then

, поэтому Len(vValue) = 0 выполняется, даже если IsNull(vValue) истинно.

изменив код на

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

может решить проблему

...