如何在c++中正确设置CURRENCY值

How to correctly set CURRENCY value in C++

本文关键字:设置 CURRENCY c++      更新时间:2023-10-16

在旧VB6程序中使用的c++ DLL中,我使用CURRENCY数据类型返回一些大值。

我用来填充它的代码是这样的:

CURRENCY INT64toCURRENCY(INT64 int64) 
{
    CURRENCY ret;
    ret.int64 = int64 * 10000;
    return ret;
}

整数溢出可能会出现在这里,但这是最小的问题:代码不适用负数,INT64toCURRENCY(-1)在VB6中出现为4 294 967 295,这是232 -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);
}

这里的问题是什么?将有符号64位整数转换为CURRENCY的正确代码是什么?

VarCyFromI8是最佳解决方案。

http://msdn.microsoft.com/en-us/library/ms644370 (v = vs.85) . aspx

CURRENCY类型在有符号值方面有点棘手;只使用已经存在的东西,而不是自己乱用。

请注意,64位变体在XP之前不受技术支持。当然,您可以使用其他VarCyFrom*函数,例如使用DECIMAL或I4。