32位的C#应用程序如何使用64位的DLL

5
我有一个C#应用程序,是32位的,目标x86安装程序。这个应用程序可以在x64机器上安装和运行,没有问题。然而,一个来自供应商的第三方硬件(集成到软件中)现在要求我们在x64系统上安装时使用64位DLL。
目前,我已经在项目中放置了32位DLL和64位DLL。然而,目标x86安装程序显然不喜欢64位DLL。
是否有可能创建一种解决方案,使我能够部署64位DLL和/或32位DLL,仍然只有一个安装程序项目?(我已经看过名为Advanced Installer的第三方软件,但我不确定它是否能帮助我实现所需的解决方案)
或者是否可能创建一个通用的安装程序项目?
注意:两个安装程序(x86 vs x64)部署是不可行的,因为我们有一个自动更新的流程,我不想重新定义。维护一个MSI文件对我很重要。
非常感谢您的建议。

1
你可以在NSIS中完成这个任务。 - leppie
3
问题在于你无法从你的x86应用程序中使用x64 DLL。 - Daniel Hilgarth
6
32位进程无法使用64位的DLL(反之亦然),部分原因在于没有办法在不同的地址空间之间进行转换。详细信息请参见雷蒙德·陈(Raymond Chen)博客上的这篇文章。如果您想要同时使用64位和32位,您需要有两个进程,并且需要进行某种形式的进程间通信。 - Joe White
2
@加密:你测试过它吗?编译并不是一个真正的指标,特别是如果所涉及的 DLL 是非托管的。 - Daniel Hilgarth
5
我可以编译许多毫无价值的东西。 - Jim Mischel
显示剩余3条评论
1个回答

0

他为什么要检查呢?该进程针对x86,这意味着它只是一个32位进程。即使将其设置为“任何CPU”,如果引用单个32位库,则它仍然是32位进程。这也意味着它无法加载任何64位库。 - Security Hound
我已经考虑到这个 DLL 可能会被 Encryption 提到的第三方组件加载,而不是直接由他的 x86 应用程序加载。 - Bogdan Mitrache

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