是否可以从32位应用程序访问64位DLL?

sma*_*ins 13 delphi 64-bit

我有一个类似于Taskbar Shuffle的Delphi应用程序,它包含一个hook dll.

编辑:此挂钩DLL通过发送Windows消息与主应用程序通信.

我想添加对XP和Vista x64的支持,我最初的想法是将dll转换为64位(用FreePascal编译它)但是现在将应用程序保持为32位(Delphi).

32位应用程序是否可以访问64位dll?

EDIT2:我正在通过LoadLibrary加载DLL,所以我想我已经卡住了,因为32位进程无法加载64位dll,根据我在Lars Truijens指出的链接上读到的内容以下答案.

Dan*_*ker 9

只要64位DLL由一个单独的64位进程加载,并且32位进程和64位DLL之间的所有通信都是通过操作系统可以编组的松散耦合的类似IPC的机制,那么是的你可以做到这一点.

我做了类似的事情.32位应用程序需要在DLL中实现自定义Print Spooler加载项.应用程序和假脱机程序加载项通过IPC机制进行通信(在这种情况下,这是一种说明临时文件的奇特方式).

在64位系统上,32位应用程序的一切工作正常,但Print Spooler拒绝加载外接程序DLL,因为Print Spooler当然是一个64位进程.

解决方案就像在64位中仅重建Spooler加载项一样简单.无需更改整个32位应用程序.


Jef*_*ard 6

不需要.您必须编译两个版本:64位和32位.


Arn*_*hez 6

我刚从CodeCentral找到了这个解决方案:http://cc.embarcadero.com/Author/802978

它允许从32位代码调用任何64位库.

这是一个复杂的解决方案,在后台运行asm编写的64位可执行文件,然后使用内存映射文件和Windows GDI消息与它进行通信,从32位Delphi进程启动一些64位函数.

有一个示例能够加载任何64位库,然后从32位可执行文件调用此库的任何函数.

似乎运作良好.在所有情况下,代码都值得一看:它是技术性的,但设计得很好!