.net - 如何从在64位窗口下运行的32位应用程序访问64位DLL?

标签 .net ms-office remoting

操作系统为Windows XP 64位。

该应用程序是Microsoft Office 32位,在其上运行我的应用程序(一个Office加载项)。

该DLL是64位Adobe 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? (我做不到)

最佳答案

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

该理论只是在程序代码中引起中断-可能会转换为DLL加载到的32位地址空间。

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

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

关于.net - 如何从在64位窗口下运行的32位应用程序访问64位DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808646/

相关文章:

c# - 在 GridView 中编辑行时如何设置文本框的宽度?

c# - 如何在 C# 中中止套接字

c# - Vista、Office Interop 不工作

c# - 我想使用 Remoting 还是只使用 Socket 连接

.net - 如何跨 AppDomains 订阅事件(object.Event += handler;)

c# - 使用 LINQ 循环和更新集合中的对象值

C# EPPLUS excel 数组公式解决方法

java - 如何使用 java 从 Microsoft 文档创建预览图像

java - 是否可以使用 Office 2010 从 Java 应用程序以编程方式打开、编辑和保存 rtf 文件?

c# - 如何将 "bind"服务提供给 .NET Remoting 服务器中的特定 channel (tcp、http、ipc)?