64位目标文件的链接

5
我正在使用Delphi 7开发JNI DLL文件。生成的文件将是32位DLL,无法在64位Java虚拟机上运行。
Delphi 7可以生成C或C++对象文件。是否可以使用第三方链接器从这些对象文件创建64位DLL?

如果您不介意更改Delphi代码与Java代码的通信方式,也许您可以在它们之间创建一个网络接口,并将Delphi代码放入其自己的REST服务器中,该服务器作为CGI进程运行。然后,您可以轻松地让32位代码与64位Java代码进行通信,因为它们是通过套接字连接的独立进程。 - Warren P
2个回答

9

Delphi编译器生成32位目标代码。无论如何,该代码都不能链接到64位模块中。

目前最好的选择是使用FreePascal,它可以生成64位DLL。 Delphi即将推出64位版本,但发行日期不确定。

另一个选择是强制使用32位版本的JVM,如果这对您可行。


我没有否决这个想法,因为在两种情况下STDCALL接口都是固定的。我认为一个最小的兼容层可以创建一个32位段和导出函数的包装器。但这只是猜测。 - vbence
1
@vbence - 在Win32和Win64上,调用约定实际上是不同的。但是,您是正确的,从技术上讲,可以编写32位和64位代码之间的桥接程序(请参见http://cc.embarcadero.com/item/27667)。 - PhiS
@PhiS 这只是两个进程和一些IPC。 - David Heffernan
真的;我并不想提出任何其他意见,但是考虑到vbence的评论,我认为他/她可能仍然对此感兴趣。 - PhiS

3

64位代码与32位代码有很大的区别,不仅仅是使用了64位指令。微软在参数传递、栈数据和对齐等方面引入了更严格的规则。无法将32位代码包含在64位DLL中(因此也禁止从64位代码调用32位代码,反之亦然,但可以使用特定技术)。你必须等待Delphi 64位编译器(并希望它的第一个版本足够好),或者寻找其他解决方案。无论如何,Delphi 7已经过时了。


谢谢!我知道这已经过时了,但是对于这个组件,我采取的是“不破不修”的方法。 - vbence
2
@vbence 如果您不想更改Pascal代码,则使用32位JVM。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接