2011-03-07 2 views
2

vb6 프로젝트 (ActiveX DLL)를 관리하고 있습니다. 디버깅 할 때, 응용 프로그램은 다음과 같은 기능으로 실행VB6 디버깅 - 오류 처리 코드로 이동하지 않습니다.

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) 또는 렌 (vValue) = 0에서 정지 그런

vValue 사용자 정의 개체입니다 , 일부 속성 (분명히 null이 아님)을 포함합니다.

거기에 중단 점을 넣지는 않았지만 앱이 멈추고 "런타임 오류 '438': 개체가이 속성이나 메서드를 지원하지 않는다는 오류 대화 상자가 표시됩니다.

오류 처리 코드가 있지만 응용 프로그램이 오류 처리 코드로 실행되지 않았습니다. 그것은 단지 오류를 일으키는 라인에서 멈췄다. 그리고 나는 어플리케이션을 멈춰야 만했다.

그 점에 대해 알고 계십니까? 대단히 감사합니다.

+1

호를 해결할 수

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

에 코드를 변경. – Mudassir

+0

이 질문과 관련하여 문제를 혼동시키는 몇 가지 사항이 있습니다. 1. IsMissing을 사용하고 있지만,'vValue'는'Optional'로 선언되어 있지 않습니다. 'IsMissing'은 메소드에 전달되지 않는'Optional Variant' 매개 변수를 탐지하는 데 사용됩니다. 2. 귀하의 의견에 따르면 'vValue'는 객체이지만 코드는 IsNull 및 Len을 사용하여 객체를 테스트합니다. 객체 참조는'Is Nothing'으로 테스트됩니다. 이 코드는 축 어적으로 게시 되었습니까? – JeffK

+0

예, 코드가 그대로 유지되는 앱에서 그대로 복사되었습니다. 나는 개발자가 구현 한 방식에 매우 놀랐다. 어쨌든 여기 논리를 무시하십시오. 난 왜 응용 프로그램이 오류 처리 코드로 실행되지 않는지 궁금해. 감사합니다 – nobitavn94

답변

6

디버거에서 팝업이 실행되는 한 IDE의 "오류 트래핑"설정과 관련이 있습니다. 도구 -> 옵션 -> 일반으로 이동하여 "오류 트래핑"에서 선택한 항목을 확인하십시오. 언뜻보기에는 오류 처리기가 오류 발생시 vValue를 테스트하고 있다는 것이 이상하게 보입니다. IsArray와 IsObject 조건을 모두 주 테스트 로직으로 옮기는이 방법에 대한 제한된 이해를 바탕으로 저에게 더 의미가 있습니다. 그냥 내 2 센트 :

+0

+1 또한 Len 테스트를 루틴의 마지막으로 옮깁니다 – MarkJ

+0

코드 창을 마우스 오른쪽 단추로 클릭 한 다음 팝업 메뉴에서 "Toggle"항목을보고 오류 트래핑 설정을 확인할 수도 있습니다. – JeffK

0

내가 아는 한 VB6가

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

그래서 Len(vValue) = 0부울 짧은 평가를 지원하지 않습니다는 IsNull(vValue)에 해당하는 경우에도 실행됩니다. 제거 부분 '또는 렌 (vValue) = 0`을 다음 시도 :

문제