c# - 在 64 位应用程序中使用 32 位互操作 dll

标签 c# com interop 32bit-64bit rcw

我对在 64 位进程中使用 32 位互操作 dll 感到有点困惑。 为了访问 8TB 内存,我将构建我的 64 位应用程序,不幸的是它使用了一些以 32 位模式构建的统计互操作库。我没有此库的源代码,因此无法将其重建为 64 位。

this文章建议是创建 64 位代理进程,它将使用 IPC(例如 WCF)与我的应用程序通信。 Here我们可以找到使用 Runtime Callable Wrapper (RCW) 的解决方案。哪个更好?我开始实现代理过程,就在今天我发现了第二种解决方案,我不知道是否适合我的需求。

我需要提一下,这个统计互操作库有数百个接口(interface)和类。我仍然只需要其中的一些。我已经开始创建 WCF 服务,将其中的几个作为端点托管,看来这需要大量代码/工作。

我可以使用第二种方法 (RCW) 与互操作 dll 一起使用吗?

问候, 乔贝克

最佳答案

好吧,“更好”是一个含蓄的术语。但是,是的,COM 代理可以使它变得非常简单。如果您可以使用系统代理,那么当库设计良好时,可能性几乎总是很好,那么您只需将注册表项复制到 64 位 key 中并调整其中的一些以使用代理,这一切都可以在没有你在写任何代码。 MSDN 起始页 is here .

如果库不支持跨单元编码,则无法解决。如果您不知道它是否存在,请尝试从工作线程调用库函数。如果这不起作用,请不要费心尝试。如果这个库容易出现崩溃错误,那么您将失去“更好”的东西,而在进程外的情况下,这种错误总是很糟糕。速度可能是一个问题,进程外调用有很多开销。但无论哪种方式,你都会坚持下去。通过联系库所有者寻求支持,您将获得好的答案而不是 SO 猜测。

关于c# - 在 64 位应用程序中使用 32 位互操作 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114016/

相关文章:

c# - 如何在编辑项目后刷新 ListView 控件?

C++ COM 互操作 : Using C# namespace with dot notation in c++

c# - 使用 .NET 代码将系统时间同步到域 Controller

c# - 如何将结构从 C# 传递到 C++ DLL?

c# - 如何从 X509Store 加载受密码保护的证书?

c# - 从 C# 调用具有函数参数的 F# 函数

.net - 是否有支持 dotnet 或 com 互操作的 lisp 实现或第 3 方库

com - 有关COM .net程序集,重排,dll,tlb和guids的几个简短问题

C# - Java 互操作

c# - 为什么在这种情况下使用 'br.s' IL 操作码?