如何在运行于64位Windows下的32位应用程序中访问64位DLL?

3
操作系统是Windows XP 64位。
应用程序是Microsoft Office 32位,我的应用程序(一个Office加入)在其上运行。
DLL是一个64位Adobe Acrobat“IFilter”dll,它可以访问.pdf文件的内容。
我认为解决问题的方法是找到32位版本的IFilter dll,但由于操作系统是Windows XP 64位,唯一能正确注册的版本是64位版本。
将我的.NET项目的目标平台设置为x86、64位或“任何CPU”都无法解决问题。
64位IFilter只有在从控制台应用程序中调用它时才能正常工作,但一旦从Office Add-In上下文中调用它,它就什么也不做。
如何解决这个问题?我应该把64位dll加载到一个新进程中,并让Office插件使用远程通信进行通信吗?
此外,对于那些熟悉IFilter的人来说,是否有可能将32位版本的IFilter与Office加入一起部署,然后直接访问它而不搜索适当安装的IFilter的注册表?(我做不到)
1个回答

1

您需要 Thunk到DLL。我不确定在WOW64中是否可能实现这一点。当然,在NT的早期版本中,它是在WOW32上可用的。

理论上,只需在程序代码中引发一个中断-就会转移到32位地址空间,其中加载了DLL。

这听起来像是一个有趣的项目。

但是,为了更快的解决方案,我建议使用您所说的方法-将dll托管在64位进程中,并使用任何IPC进行通信(个人认为WCF命名管道非常容易,或者如果数据传输量很大,可以使用内存映射文件)。


嘿嘿。扑通声。我觉得很有趣,因为Thunk是撞击物体后听到的声音。 - Cole Tobin

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