JNA long返回的值在32位和64位不同

时间:2012-09-25 13:55:45

标签: java jna

我在项目中使用JNA从Windows中的C函数接收长值。

方法是:

long identifier();

当我在64位上使用我的虚拟机(Windows 64的JRE 1.7.0_05)时,我使用编译后的dll为64位,我得到这个数字:

identifier = 528913750 

如果我使用虚拟机(Windows 32的JRE 1.7.0_07)和编译后的dll为32位,我得到这个数字:

identifier = 369896101206

正确的是第一个! (对于64位)

它们的二进制值是:

64 bits =           11111100001101001010101010110
32 bits = 101011000011111100001101001010101010110

有人知道为什么我在开始时以32位获得这个1010110?

1 个答案:

答案 0 :(得分:0)

Wikipedia中,有一个表描述了JNA中本机类型的映射。只支持64位直接转换为long,否则必须使用NativeLong

在此article中还介绍了如何映射原生长。