2012-09-25 69 views
0

我在我的項目中使用JNA從Windows中的C函數接收長的值。JNA長返回值在32位和64位不同

的方法是:

long identifier(); 

當我用我的虛擬機(JRE 1.7.0_05適用於Windows 64)的64位我使用編譯的.dll文件的64位,我得到這個號碼:

identifier = 528913750 

如果我使用的虛擬機(JRE 1.7.0_07窗戶32)與32位的已編譯的DLL,我得到這個號碼:

identifier = 369896101206 

正確的是第一個! (64位)

他們的二進制值是:

64 bits =   11111100001101001010101010110 
32 bits = 101011000011111100001101001010101010110 

有人知道我爲什麼會得到這個1010110開頭的32位?

+0

對不起,我通過從JNA更改爲NativeLong來解決問題 –

+0

沒有標識符()的代碼,它是在c –

+3

中實現的本地函數,我建議您將此添加爲答案並接受它。注意你的速度。 – Fildor

回答

0

Wikipedia有一張表描述了JNA中本地類型的映射。直接轉換爲long只支持64位,否則必須使用NativeLong

在這article還描述瞭如何映射一個本地長。