2014-01-23 36 views
2

我有一个32位的应用程序,我无法控制。我目前正在与一个32位的C++ DLL进行通信,这个C++ DLL会对数据进行处理并将其传递给C#应用程序可以访问的32位.NET DLL。我想将我的C#应用​​程序升级到64位以获得更大的内存访问权限。.NET Concurrent Collections可用于进程间x32与x64通信之间的进程吗?

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

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

在此先感谢您的帮助。

+1

COM互操作是获取本机C++应用程序使用.NET对象的常用方法。适用于System.Collections中的类,它们具有[ComVisible]属性。跨过程和边界边界工作。但不适用于并发集合,它们是通用的。 COM不支持泛型类。这就是它结束的地方。 –

回答

2

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

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

  1. 包了32位库为COM对象和托管它的过程。 COM会将来自64位的呼叫编组到32位,然后再回来。

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

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

+0

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