2009-08-12 67 views
1

我從VB6調用C++函數。 其中我需要傳遞貨幣數據類型的變量。但是在C++中我們沒有這樣的數據類型。 我應該在C++函數中使用什麼來使貨幣數據類型兼容?VB 6的貨幣數據類型到C++

回答

2

我想最好的選擇是將它作爲VARIANT傳遞並手動處理C++代碼中的VARIANT。

0

只需將currency類型乘以100,然後將其作爲long整數傳遞給C++。當你需要結果時,做相反的事。

不會有精度損失,代碼也很簡單。

+0

儘管如果答案超出了long的可能範圍,您將會發生溢出。 – MarkJ 2009-08-12 08:53:50

+0

正確,如果金額超過$ 20,000美元:)如果金額很大,那麼'__int64'會更合適。 – lavinio 2009-08-12 15:34:35

1

的VB6s 貨幣類型是大致相同從C++(假設一個Microsoft編譯器)

內部,它是一個8字節整數其通過的因子縮放的CY類型10,000,在小數點分隔符後給你4位數字。

根據編譯器可以直接使用CY類型或傳遞VARIANT並使用myVariant.cyVal(這是CY類型)。

如果您沒有VARIANTCY類型可用(它們不是C++標準的一部分),那麼您的C++函數必須接受64位整數,並且必須將該值除以10,000以得到正確的值值。 (要麼使用__int64long long,再次取決於編譯器)

2

相信的Visual C++有一個本機64位整數型__int64(也稱爲CY),其大致相當於VB6貨幣?雖然在你的C++代碼中,你會「看到」這個值比你在VB6中「看到」的值大10,000倍。在C++中除以10,000以獲得正確的值,或者使用縮放值來保持精度。

對於其他C++編譯器布魯斯·麥金尼的聖經性交的Visual Basicrecommends這樣的事情,所以做MSDN

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

詳情請參閱here