C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC
Posted
技术标签:
【中文标题】C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC【英文标题】:IPC between a C# application and other applications in C++ and VB.Net 【发布时间】:2011-05-13 03:20:21 【问题描述】:我有一个 C# 服务器应用程序,它需要与另外 3 个客户端应用程序通信和控制:一个在 C# 中,一个在 C++ 中,一个在 VB.Net 中。它们都是 Windows 窗体应用程序。他们基本上需要交换一些字符串和数字,而不是重载。在 C# 和那些不同的语言之间进行 IPC 的最佳方法是什么?请注意,客户端不相互通信,它们只与服务器通信。
C# 需要与 C++ 对话,所以我猜 WCF 不好,因为 WCF 只能在两个 .Net 应用程序之间工作?
我能否在所有这些语言中方便地使用命名管道:C#、C++ 和 VB.Net?
我还想知道将来是否必须添加 VB6、VBScript 和 PowerShell 脚本作为客户端,适用于所有这 6 种语言的最佳 IPC 选项是什么?我还能使用命名管道吗?
【问题讨论】:
查看这个答案***.com/questions/2012210/… 【参考方案1】:实际上,配置为通过 HTTP 公开服务的 WCF 可能是您想要支持的语言列表的最佳选择。
如果您不喜欢 WCF,请考虑公开 HTTP REST 接口,即通过在 ASP.Net MVC 中编写服务器。
命名管道支持 - C#/VB.Net,C++ - 很好,VB6 - 我不知道,VBScript - 绝对不是开箱即用的,PowerShell - 是的,因为它可以使用 .Net 库。
【讨论】:
【参考方案2】:对于您列出的语言,最快的解决方案是命名管道,更好的是内存映射文件。两者都在 .NET 4.0 和非托管 C++ 中实现。
我建议查看内存映射文件。创建一个文件和一个关联的视图作为单生产者、多消费者、单向通道是相对简单的。例如,您可以使用该区域的前 4 个字节来存储写入的最后一个字节的更新值(以视图大小为模 - 4 个字节),并使用 EventWaitHandle 来同步生产者/消费者访问。访问单独内存映射文件的两个通道将为您提供一个双工通道。
.NET (C# and VB.NET) 的链接和 unmanaged C++.
然后您可能希望将 Protocol Buffers 视为序列化二进制数据的一种非常有效的方法。
0MQ 是 Linux 领域的优秀产品,但 Windows 版本有些精简,而且不支持 IPC。
【讨论】:
【参考方案3】:您可以尝试不同的库,例如 OpenDDS、ZeroMQ 等。虽然 Windows 上的 ZeroMQ 还不支持 IPC(但支持 TCP)。
【讨论】:
以上是关于C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 VB.net GUI 的 C++ OpenCV 项目中使用 C# 库?