레거시 VB6 프로그램에서 사용되는 C++ DLL에서 큰 값을 반환하려면 CURRENCY 데이터 형식을 사용합니다.C++에서 CURRENCY 값을 올바르게 설정하는 방법
이CURRENCY INT64toCURRENCY(INT64 int64)
{
CURRENCY ret;
ret.int64 = int64 * 10000;
return ret;
}
정수 오버 플로우가 여기에 발생할 수있는, 그러나 이것은 적어도 문제 : 코드는 음수 작동하지 않습니다, INT64toCURRENCY(-1)
가 나타납니다
나는 그것을 채우기 위해 사용하고 코드는 다음입니다 VB2 = 4 294 967 295이고, 이는 2 -1이다.
그러나 cout << INT64toCURRENCY(-1).int64
은 -10000으로 추정됩니다.
은 VB6 프로그램은 기본적으로 이것이다 :
Public Declare Function My_Fun Lib "My_Lib.dll" _
(ByVal param As Boolean) As Currency
Dim c As Currency
c = My_Fun(True)
및 My_Fun
여기에 문제가 무엇
extern "C" CURRENCY __stdcall My_Fun(VARIANT_BOOL param)
{
return INT64toCURRENCY(-1);
}
로 정의 CURRENCY
에 서명 64 비트 정수를 변환하는 올바른 코드 것입니다 ?
VB6 ?! 좋은 하나님, 남자 ... –
@JohnDibling : "legacy";-) 추가 –
C++ 코드를 호출하는 VB 코드를 추가 할 수 있습니까? VB 코드가 반환 된 값의 상위 dword를 부호있는 32 비트 수량으로 처리하는 것처럼 보입니다. VB에서 CURRENCY가 올바르게 작동합니까? 디버거에서 (아마도 어셈블리 언어로)이 단계를 수행하면 해결 방법이 아니라면 어떤 일이 벌어지고 있는지 명확해야합니다. –