当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《是否可以从32位应用程序访问64位DLL?》经验,为你挑选了3个好方法。

我有一个类似于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指出的链接上读到的内容以下答案.



1> Daniel Earwi..:

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

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

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

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



2> Jeff Hubbard..:

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



3> Arnaud Bouch..:

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

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

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

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

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

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有