3

操作系统是 Windows XP 64 位。

该应用程序是 Microsoft Office 32 位,在其上运行我的应用程序(一个办公室插件)。

该 DLL 是一个 64 位 Adob​​e Acrobat “IFilter” dll,它可以访问 .pdf 文件的内容。

我认为问题的解决方案是找到 IFilter dll 的 32 位版本,但由于操作系统是 windows XP 64 位,唯一可以正确注册的版本是 64 位版本。

将我的 .NET 项目的目标平台设置为 x86、64 位或“任何 CPU”都不能解决问题。

64 位 IFilter 仅在我从控制台应用程序中调用它时才能正常工作,但是一旦从 office 加载项的上下文中调用它,它就什么也不做。

解决这个问题的最佳方法是什么?我是否应该将 64 位 dll 加载到新进程中并让 Office 插件使用远程处理与其通信?

另外,对于那些熟悉 IFilter 的人,是否可以将 32 位版本的 IFilter 与 office 插件一起部署,然后直接访问它,而无需在注册表中搜索正确安装的 IFilter?(我做不到)

4

1 回答 1

1

您将需要Thunk到 DLL。这在WOW64中是否可行我不确定。当然,在 NT 的早期,它在 WOW32 上可用。

该理论只是导致程序代码中断 - 这将转入加载 DLL 的 32 位地址空间。

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

但是,对于更快的解决方案,我会使用您所说的 - 在 64 位进程中托管 dll 并使用您喜欢的任何 IPC 进行通信(个人 WCF 命名管道非常容易,或者如果数据 tx 高,您可以使用内存映射文件体积。

于 2012-05-30T00:55:43.483 回答