는 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_ERROR
vt
의 의미를 설명한다. 오류 유형은 코드에 지정됩니다. 일반적으로 오류 값에 대한 연산은 예외를 발생 시키거나 해당 오류를 반환 값에 전파해야합니다.
그래서, 여기에 무슨 뜻인지 기본적이다 :
Variant
분명히 값의 많은 종류를 저장 지원하고, 그 (것)들의 사이에서 "오류 코드"를 저장하는 모호한 가능성이다. 더 정확하게 말하자면,이 코드는 정식으로 scode
이라고 불리며, 이는 "성공"과 "실패"의 여러 유형을 나타낼 수 있기 때문입니다. 대부분의 사람들은이 코드를 HRESULT
이라고 말합니다.
이 코드는 VB6에서 Err.Number
에서 가져 오는 것과 같은 종류의 "오류 코드"입니다. 따라서 Variant
에 "오류 코드"를 일반 번호와 구별하도록 말할 수 있습니다.
사실상 일부 프로그램이나 COM 구성 요소 (있는 경우)는 오류 코드를 변형에 넣지 않습니다. 거의 모든 사람들이 COM 예외를 발행하여 오류를 전달합니다 (이 메커니즘은 Err
개체를 통해 VB6에 공개됩니다). COM 예외 메커니즘 외부에서 오류 코드를 반환하는 구성 요소조차도 입력 된 변수 (예 : Long
')에서 그렇게 할 수 있습니다.
따라서이 가능한 반환 값이 존재하는 이유는 완전성을위한 것입니다. 당신은 현실에서 거의 볼 수 없을 것입니다.
(편집 :. "오류"변종을 만들 수 없다는 대한 비트를 제거 @Joe가에 대한 오해 증명 당신은 하나를 만들 CVErr()
를 사용할 수 있습니다.) 자세한 답변을
감사합니다. 그럼에도 불구하고이 질문을 게시하게 된 문제를 해결할 수 없었지만, 그럼에도 불구하고 유익했습니다. –
@JoeMajsterski, 도와 줘서 고맙습니다. 새로운 것을 배울 수있게되었습니다. 그래서, 실제 문제는 무엇입니까? 이 질문에서 분명하지 않았다. –
매우 기괴한 것입니다. 여기에 또 다른 질문이 있습니다 : http://stackoverflow.com/questions/16429119/exporting-c-function-declared-in-vb6-getting-remote-procedure-call-failed 나는 세부 사항으로 확장 할 것입니다. –