操作系统是Windows XP 64位。
该应用程序是Microsoft Office 32位,我的应用程序(办公室插件)运行在其上。
DLL是64位Adobe Acrobat“IFilter”dll,可以访问.pdf文件的内容。
我认为该问题的解决方案是找到32位版本的IFilter dll,但由于操作系统是Windows XP 64位,唯一能够正确注册的版本是64位版本。
将我的.NET项目的目标平台设置为x86,64位或“任何CPU”都无法解决问题。
只有当我从控制台应用程序中调用它时,64位IFilter才能正常工作,但是一旦从办公室外接程序的上下文中调用它,它就什么都不做。
解决此问题的最佳方法是什么?我应该将64位dll加载到新进程中并让办公室加载项使用远程处理与它进行通信吗?
另外,对于那些熟悉IFilter的人来说,是否可以将32位版本的IFilter与Office加载项一起部署,然后直接访问它而无需在注册表中搜索正确安装的IFilter? (我不能这样做)
答案 0 :(得分:1)
您需要Thunk到DLL。是否可以在WOW64中使用我不确定。当然,它在新界的日子里可以在WOW32上找到。
理论只是在程序代码中引起中断 - 这会导致加载DLL的32位地址空间。
这听起来像一个有趣的项目。
然而,为了更快的解决方案,我会使用你所说的 - 在64位进程中托管dll并使用你喜欢的IPC进行通信(个人WCF命名管道非常简单,或者如果数据可能你可以使用内存映射文件tx是高音量。