.NET 并发集合可以用于进程间 x32 到/来自 x64 的通信吗?

Posted

技术标签:

【中文标题】.NET 并发集合可以用于进程间 x32 到/来自 x64 的通信吗?【英文标题】:Can the .NET Concurrent Collections be used for inter-process x32 to/from x64 communications? 【发布时间】:2014-01-23 16:53:10 【问题描述】:

我有一个无法控制的 32 位应用程序。我目前让它与一个 32 位 C++ DLL 通信,该 DLL 处理数据并将其传递给一个 32 位 .NET DLL,我的 C# 应用程序可以访问它。我想将我的 C# 应用程序升级到 64 位以获得更大的内存访问权限。

有没有办法让我的 32 位 C++ DLL 与 .NET 并发集合,特别是 ConcurrentQueue 通信?这将允许进程间通信吗?如果是这样,有没有我可以学习的例子?如果没有,是否有人知道任何 API 或库来解决双向 32 - 64 位进程间通信。

对于许多开发人员来说,这似乎是一个主要问题,但我的搜索并没有发现一个快速、可靠、可能简单的解决方案。我觉得奇怪的是主要组件开发人员不提供任何解决方案(我发现)。

提前感谢您的帮助。

【问题讨论】:

COM 互操作是让原生 C++ 应用程序使用 .NET 对象的常用方法。适用于 System.Collections 中的类,它们具有 [ComVisible] 属性。跨进程和位数边界工作。但不适用于并发集合,它们是通用的。 COM 不支持泛型类。到此为止。 【参考方案1】:

没有办法在进程中混合 32 位和 64 位应用程序和 dll。

如果您想在 32 位和 64 位应用程序之间进行通信,那么您有几个选择:

    将 32 位库打包成一个 COM 对象并将其托管在进程之外。 COM 会将调用从 64 位编组到 32 位,然后再编组。

    使用 IPC(例如命名管道、TCP 或 WCF)在 32 位和 64 位应用程序之间进行通信。

    使用内存映射文件通过共享数据结构交换数据。这可能是最复杂的解决方案。

【讨论】:

这是我所期望的。任何人都知道可以使用的各种方法的帮助程序库和/或示例代码吗?对于小块浮点数据,哪种方法最快?

以上是关于.NET 并发集合可以用于进程间 x32 到/来自 x64 的通信吗?的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程间通信 --- 信号量

了解来自多个进程的并发文件写入

[.Net] 什么是线程安全的并发集合

DLL 如何处理来自多个进程的并发?

并发编程

移植 - 共享内存 x32 和 x64 进程