如何包装32位.dll以便它可以在64位操作系统中运行

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

这里真正的麻烦是JPIB项目自2006年9月以来一直没有更新。我曾尝试通过SourceForge向开发者发送电子邮件,但我认为我不会随意使用它。

有没有人知道这方面的任何方法? 或者知道如何(并且可以告诉我如何)将.dll重新编译为AMD-64合规性?

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

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

如果要重建该DLL,则需要获取源及其所有依赖项并安装构建工具。 这应该不会太难,但如果您正在安装MS Visual Studio,我似乎需要一些关于安装x64内容的问题。 这可能取决于您的安装平台; 如果你在x64上安装,大概就是Just Work。

32位虚拟机仍可在64位AMD平台和英特尔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的远程调用以供执行。

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