从64位应用程序加载32位共享库?
不,您无法通过常规方式在64位应用程序中加载32位库。
这里有一些聪明的黑客,比如有一个32位应用程序加载库并通过IPC接口导出函数,但是如果您有选择将库编译为64位,那么这是是迄今为止最好的选择。
您提到的这个巧妙的破解仍然在32位进程中加载DLL。你是否知道这些在64位进程中加载32位DLL的黑客? – 2011-04-19 21:06:46
@约翰:没有什么可行的。你当然可以做一些事情,比如在你的进程中分配内存,并手动读取32位dll中的二进制代码。但处理器会将其视为无法正常运行的64位指令。它不能用x86-64/x86架构完成。 – 2011-04-19 21:20:23
无法从64位应用程序动态或静态加载32位库,反之亦然。
有许多变通的,我知道的:
- 充分利用DLL的64位版本
- 使该应用程序的32位版本
- 介绍一COM代理对象(也称为代理)作为通信中介。 Described here。
- 主机的DLL在一个单独的(32位)和EXE使用IPC技术
有许多的进程间通信(IPC)的技术。这里有几个例子:
- 命名管道
- 窗口形式交往
- 插座
- HTTP监听
- WCF服务(described here)
- .NET remoting
+1,尽管IPC技术列表中缺少共享内存,共享文件,数据库表,RFC,COM和视频屏幕戳);换句话说:我建议“有一些进程间通信IPC)技术:“您添加了”其中一些是:“短语。 – TheBlastOne 2012-10-17 16:02:30
什么操作系统?这可能很重要。 – 2011-04-19 18:29:06
Windows 7和Red Hat Linux。 – Brian 2011-04-19 18:30:56
@保罗:实际上应该没关系。假定x86-64,处理器在任何给定点处于长模式(64位),保护模式(32位)或实模式(16位)。当一个线程被调度时,该模式被设置为匹配只能是其中之一的进程。这是x86/x86-64如何工作的核心问题。 – 2011-04-19 19:07:37