我对在 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/