我在项目中使用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?
答案 0 :(得分:0)
在Wikipedia中,有一个表描述了JNA中本机类型的映射。只支持64位直接转换为long,否则必须使用NativeLong。
在此article中还介绍了如何映射原生长。