在從傳統VB6程序使用的C++ DLL中,我使用CURRENCY數據類型來返回一些較大的值。如何在C++中正確設置CURRENCY值
我使用,以填補它的代碼是這樣的:
CURRENCY INT64toCURRENCY(INT64 int64)
{
CURRENCY ret;
ret.int64 = int64 * 10000;
return ret;
}
的整數溢出可能會出現在這裏,但這個是最問題:代碼不爲負數的工作,INT64toCURRENCY(-1)
出現在VB6爲4 294 967 295,即2 -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
?
VB6 ?!好神,男人...... –
@JohnDibling:增加了「傳統」;-) –
你可以添加你的調用C++代碼的VB代碼嗎?它看起來像VB代碼將返回值的高位dword視爲有符號的32位數量。 CURRENCY在VB中可以正常工作嗎?如果你在調試器(也許是彙編語言)中通過它,它應該足夠清楚發生了什麼,如果不是如何解決它。 –