VB 6到C ++的货币数据类型

时间:2009-08-12 06:22:23

标签: vb6

我从VB6调用C ++函数。 其中我需要传递Currency数据类型的变量。 但是在C ++中我们没有这样的数据类型。 我应该在C ++函数中使用什么来与货币数据类型兼容?

4 个答案:

答案 0 :(得分:2)

我想最好的办法是将其作为VARIANT传递,并在C ++代码中手动处理VARIANT。

答案 1 :(得分:2)

我相信Visual C ++有一个原生的64位整数类型__int64(也称为CY),大致相当于VB6货币?虽然在C ++代码中,您将“看到”该值比您在VB6中“看到”的值大10,000倍。要么在C ++中除以10,000以获得正确的值,要么使用缩放值来保持精度。

对于其他C ++编译器Bruce McKinney的圣经 Hardcore Visual Basic recommends这样的事情,MSDN也是如此:

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

有关详细信息,请参阅here

答案 2 :(得分:1)

VB6 货币类型与C ++中的 CY 类型大致相同(假设是Microsoft编译器)

在内部,它是 8字节整数,按系数10,000 缩放,在小数点分隔符后面为4位数。

根据编译器的不同,您可以直接使用CY类型或传递VARIANT并使用myVariant.cyValCY类型)。

如果您没有可用的VARIANTCY类型(它们不是C ++标准的一部分),您的C ++函数必须接受64位整数,您必须将值乘以10,000以获得正确的值。 (再次使用__int64long long,取决于编译器)

答案 3 :(得分:0)

只需取currency类型并将其乘以100,然后将其作为long整数传递给C ++。当您需要返回结果时,请执行相反的操作。

不会损失精度,代码非常简单。