代码之家  ›  专栏  ›  技术社区  ›  Duncan Jones

JNA Kernel32映射会在32位机器上工作吗?

  •  -1
  • Duncan Jones  · 技术社区  · 11 年前

    我的应用程序包括以下对JNA预制菜的调用 Kernel32 interface :

    int processID = Kernel32.INSTANCE.GetCurrentProcessId();
    

    我可以使用我的64位笔记本电脑将我的应用程序构建到JAR中,并期望它在32位机器上运行吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   icza    11 年前

    如果您包含32位库,您所做的就是编写Java代码来调用它并执行其他Java操作,那么是的,它也可以在32位机器上运行。

    Java代码编译成独立于体系结构的字节码,不存在32位或64位字节码。

    只有在包含64位库时才会出现问题,因为这些库显然不会在32位机器上运行。

        2
  •  1
  •   Duncan Jones    11 年前

    显然,Java编译成独立于平台的字节码,所以我的问题归结为两个子问题:

    1. 库绑定是在编译时还是在运行时完成的?

    2. Kernel32 接口正确编写,以描述32位和64位版本的 kernel32.dll 文件

    经过思考,问题1很明显。JNA没有随编译器一起分发,因此绑定必须在运行时完成。这一点得到了 GitHub page :

    JNA使用一个小的JNI库存根来动态调用本地代码。

    问题2很难回答,但考虑到使用的所有类型似乎都与体系结构无关( int 根据 this FAQ entry ,所有指针都使用 WinNT.HANDLE 等等)那么我很有信心这是好的。