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

时间:2011-10-14 14:09:06

标签: c++ vb6 type-conversion currency

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

我用来填充它的代码是:

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

这里可能会出现整数溢出,但这是最少的问题:代码不适用于负数,INT64toCURRENCY(-1)在VB6中显示为4 294 967 295,即2 32 -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的正确代码是什么?

1 个答案:

答案 0 :(得分:1)

VarCyFromI8是最佳解决方案。

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

CURRENCY类型在签名值方面有点棘手;只需使用已存在的东西而不是自己搞乱它。

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