2009-08-12 3 views
1

VB6에서 C++ 함수를 호출합니다. Currency 데이터 유형의 변수를 전달해야합니다. 그러나 C++에서는 이러한 데이터 유형이 없습니다. C++ 함수에서 통화 데이터 유형과 호환되도록하려면 어떻게해야합니까?통화 데이터 형식 VB 6 to C++

답변

2

아마도 가장 좋은 방법은 VARIANT으로 전달하고 C++ 코드에서 VARIANT를 수동으로 처리하는 것입니다.

0

currency 유형을 취하여 100을 곱한 다음 C로 전달하면 long 정수가됩니다. 결과가 필요하면 그 반대로하십시오.

정밀도가 떨어지지 않으며 코드가 매우 간단합니다.

+0

답변이 가능한 범위를 초과하면 오버플로가 발생하지만, – MarkJ

+0

양이 $ 20 000 000을 초과하는 경우 참 : 금액이 클 경우 '__int64'가 더 적합합니다. – lavinio

1

VB6s 통화 형 대략

내부가의 인자에 의해 스케일링 된 8 바이트 정수있다 (마이크로 소프트 컴파일러 가정) ++ C에서 CY 형태와 동일 10,000, 소수점 구분 기호 다음에 4 자리 숫자를 부여합니다.

컴파일러에 따라 직접 CY 유형을 사용하거나 VARIANT을 통과합니다 (CY 유형 인) myVariant.cyVal를 사용할 수 있습니다.

VARIANTCY 유형을 사용할 수없는 경우 (C++ 표준의 일부가 아님) C++ 함수는 64 비트 정수를 허용해야하며 올바른 값을 얻으려면 값을 10,000으로 나누어야합니다 값.

2

내가 VB6 현재 대략 동일하다 (도 CY 알려진) 고유의 64 비트 정수형 __int64을 갖는다 ++ 카메라 C를 판단 (다시 컴파일러에 따라 __int64 또는 long long을 사용 하나)? C++ 코드에서는 VB6에서 "보는"값보다 10,000 배 큰 값을 "보게"됩니다. C++에서 10,000으로 나누어 올바른 값을 얻거나 정밀도를 유지하기 위해 크기 조정 된 값으로 작업하십시오. 다른 C에 대한

는 ++ 그렇게 MSDN 않습니다,이 같은 브루스 맥키 니의 성경 하드 코어 Visual Basic의 recommends 뭔가를 컴파일러는 :

typedef union _LARGE_INTEGER { 
    struct { 
     DWORD LowPart; 
     LONG HighPart; 
    }; 
    LONGLONG QuadPart; // In Visual C++, a typedef to __int64 
} LARGE_INTEGER; 

은 자세한 내용은 here를 참조하십시오.