2013-05-15 1 views
2

전 웹에서이 모든 것을 검색했지만 ErrObject 클래스 또는 VarType 함수에서 반환되는 상수는 vbError입니다. 실제로 해당 유형이 인 것을 알고 싶습니다.입니다. integerhere 모두가 반환 상수와 그들이 표현을 보여줍니다 공식 MSDN 페이지에 대한 VarType에 대한 링크입니다하는 string는 약간의 배경에 대한 등VB6에서 VarType에 의해 반환 된 vbError는 무엇입니까?

"hello world" 같은 것입니다, 4 같은 것입니다. Error value은 무엇입니까?

답변

4

는 C/C++에서 COM에 대해 잘 알고 있다면, 당신은 그 관점 VarType()에서 기본적으로 매개 변수로 전달 된 Variant에서 vt 멤버의 값을 추출하는 간단한 함수임을 알아야한다. vt 구성원의 가능한 값은 here과 같이 여러 위치에 문서화되어 있습니다. 당신은 COM 시스템 헤더의 내부에 체크하면

(예를 들어 WTypes.h는 Windows SDK의 일부로 배포), 당신은 10의 VbError 값이 참 VT_ERROR의 C/C++ 열거 값으로 매핑하는 것을 볼 수 있습니다.

SCODE 지정 하였다

enum VARENUM 
    { VT_EMPTY = 0, 
     ... 
     VT_ERROR = 10, 
     ... 
    } ; 

는 MSDN 링크 위에서 다음과 같다 VT_ERRORvt의 의미를 설명한다. 오류 유형은 코드에 지정됩니다. 일반적으로 오류 값에 대한 연산은 예외를 발생 시키거나 해당 오류를 반환 값에 전파해야합니다.

그래서, 여기에 무슨 뜻인지 기본적이다 :

Variant 분명히 값의 많은 종류를 저장 지원하고, 그 (것)들의 사이에서 "오류 코드"를 저장하는 모호한 가능성이다. 더 정확하게 말하자면,이 코드는 정식으로 scode이라고 불리며, 이는 "성공"과 "실패"의 여러 유형을 나타낼 수 있기 때문입니다. 대부분의 사람들은이 코드를 HRESULT이라고 말합니다.

이 코드는 VB6에서 Err.Number에서 가져 오는 것과 같은 종류의 "오류 코드"입니다. 따라서 Variant에 "오류 코드"를 일반 번호와 구별하도록 말할 수 있습니다.

사실상 일부 프로그램이나 COM 구성 요소 (있는 경우)는 오류 코드를 변형에 넣지 않습니다. 거의 모든 사람들이 COM 예외를 발행하여 오류를 전달합니다 (이 메커니즘은 Err 개체를 통해 VB6에 공개됩니다). COM 예외 메커니즘 외부에서 오류 코드를 반환하는 구성 요소조차도 입력 된 변수 (예 : Long ')에서 그렇게 할 수 있습니다.

따라서이 가능한 반환 값이 존재하는 이유는 완전성을위한 것입니다. 당신은 현실에서 거의 볼 수 없을 것입니다.

(편집 :. "오류"변종을 만들 수 없다는 대한 비트를 제거 @Joe가에 대한 오해 증명 당신은 하나를 만들 CVErr()를 사용할 수 있습니다.) 자세한 답변을

+0

감사합니다. 그럼에도 불구하고이 질문을 게시하게 된 문제를 해결할 수 없었지만, 그럼에도 불구하고 유익했습니다. –

+0

@JoeMajsterski, 도와 줘서 고맙습니다. 새로운 것을 배울 수있게되었습니다. 그래서, 실제 문제는 무엇입니까? 이 질문에서 분명하지 않았다. –

+0

매우 기괴한 것입니다. 여기에 또 다른 질문이 있습니다 : http://stackoverflow.com/questions/16429119/exporting-c-function-declared-in-vb6-getting-remote-procedure-call-failed 나는 세부 사항으로 확장 할 것입니다. –

4

VB6 및 VBA에서는 CVErr 함수를 호출하여 오류 값이 만들어집니다.

이 함수는 VarType이 vbError이고 IsError 함수가 True을 반환하는 Variant를 반환합니다.

일반적인 사용 사례는 Variant를 반환하는 Excel UDF입니다. 오류 값을 반환하면 # VALUE로 표시됩니다.

관련 문제