我从VB6调用C ++函数。 其中我需要传递Currency数据类型的变量。 但是在C ++中我们没有这样的数据类型。 我应该在C ++函数中使用什么来与货币数据类型兼容?
答案 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.cyVal
(CY
类型)。
如果您没有可用的VARIANT
和CY
类型(它们不是C ++标准的一部分),您的C ++函数必须接受64位整数,您必须将值乘以10,000以获得正确的值。 (再次使用__int64
或long long
,取决于编译器)
答案 3 :(得分:0)
只需取currency
类型并将其乘以100,然后将其作为long
整数传递给C ++。当您需要返回结果时,请执行相反的操作。
不会损失精度,代码非常简单。