【问题标题】:Ways to wrap 32-bit .dll so it will work in a 64-bit OS包装 32 位 .dll 使其在 64 位操作系统中工作的方法
【发布时间】:2011-02-24 21:52:31
【问题描述】:

所以,我一直在使用 JPIB 与我的 java 程序中的 GPIB 设备进行通信。但是,我遇到了障碍。较新的系统建立在 64 位操作系统上。但是,jpib.dll 文件是用 32 位编写的。我想不出它需要进行的任何类型的调用真正依赖于 64 位。

真正的麻烦在于 JPIB 项目自 2006 年 9 月以来一直没有更新。我尝试通过 SourceForge 向开发人员发送电子邮件,但我认为我不会得到任何结果。

有人知道解决这个问题的任何方法吗?或者知道如何(并且可以告诉我如何)将 .dll 重新编译为符合 AMD-64 标准?

【问题讨论】:

  • 是否可以简单地将 32 位 JRE 与使用 32 位本机库的应用程序捆绑在一起?然后使用捆绑的 JRE 启动您的应用程序。然后它也可以在 64 位架构上运行。

标签: java dll winapi 32bit-64bit


【解决方案1】:

注意:我不知道 JPIB 和 GPIB 是什么。

如果您想按原样使用 DLL,那么您需要编写一个可以动态链接该 DLL 并通过某种 IPC 与您的应用程序通信的应用程序。

如果您想重新构建该 DLL,那么您需要获取源代码及其所有依赖项并安装构建工具。这应该不会太难,虽然如果你正在安装 MS Visual Studio,我似乎需要一些关于安装 x64 东西的陷阱。不过,这可能取决于您的安装平台;如果你在 x64 上安装,它大概会正常工作。

【讨论】:

    【解决方案2】:

    32 位 VM 仍可在 64 位 AMD 平台和 Intel EMT64 平台上运行。

    但是,如果您想在 64 位进程中使用该库,您可以使用 java 来帮助您。该解决方案使用 2 个 JVM - 一个 32 位和一个 64 位 - 64 位的一个托管您的主应用程序。 32 位主机托管 JPIB 库。然后使用RMI 在它们之间架起桥梁。更详细:

    • JPIB 库有一个相当小的 API。不幸的是,它全部实现为类。您可以通过实现与主驱动程序类具有相同方法签名的接口来抽象库。
    • 直接调用JPIB类来实现接口。您可以使用 RMI 通过 RMI 从 32 位 JVM 公开此接口。
    • 在 64 位 JVM 中,您使用 RMI 从 32 位 VM 获取 JPIB 接口的实例。您现在可以像调用本地方法一样调用该接口上的方法,但它们被实现为对 32 位 VM 的远程调用以执行。

    【讨论】:

      【解决方案3】:

      您应该能够编写一个 64 位包装器以 thunk 到 32 位 DLL 中,并让您的 JNI 代码调用 64 位包装器而不是 32 位 DLL。 Thunking 是一个相当高级且依赖于平台的 C/C++ 主题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        相关资源
        最近更新 更多