我有一个编译为32位的共享库。我可以在64位应用程序中使用它,还是需要将共享库编译为64位?从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
- 1. 在64位应用程序中加载32位DLL库
- 2. 调用32位或64位程序从启动加载程序
- 3. 从32位应用程序启动64位应用程序?
- 4. 在32位swt eclipse rcp应用程序中加载64位ole
- 5. 32位/ 64位Windows/Linux应用程序
- 6. 从Excel应用程序对象中查找位(32位/ 64位)?
- 7. 大厦32位共享库的64位Linux与cmake的
- 8. 共享库-64位上的Java 32位Ubuntu
- 9. 混淆了32位和64位共享对象/库
- 10. 在64位应用程序中使用32位库
- 11. 64位库,应该与32位和64位进程工作
- 12. 在Centos中链接64位应用程序与32位库5.6 64位
- 13. 从32位应用程序启动64位进程?
- 14. Outlook 64位使用从32位应用程序的64位兑换
- 15. Xcode:编译与32位库的64位应用程序
- 16. 在32位和64位进程之间共享共享内存段
- 17. 从32位应用程序调用64位COM控件
- 18. 从64位目标应用程序调用32位lib文件
- 19. 使用SPSite从32位应用程序访问64位SharePoint
- 20. iOS 32与64位应用程序
- 21. 将asp.net从32位移植到64位webform应用程序
- 22. 是否可以从32位应用程序访问64位dll?
- 23. 从32位应用程序打开64位注册表
- 24. 从32位应用程序访问64位注册表
- 25. 将iOS应用程序从32位升级到64位
- 26. SHGetSpecialFolderPath,如何从32位应用程序访问64位CSIDL
- 27. 将数据从32位应用程序传递到64位应用程序?
- 28. 从32位应用程序启动“不相关”的64位应用程序
- 29. 如何从32位C++应用程序启动64位Java应用程序?
- 30. MATLAB:编译64位Windows 64位安装的32位共享库安装了64位MATLAB
什么操作系统?这可能很重要。 – 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