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 c c++,c# vb.net到底啥区别

将模板类从 C++ 库导出到 VB.NET 和 C#

如何在带有 VB.net GUI 的 C++ OpenCV 项目中使用 C# 库?

C++ ULONG 定义为 VB.NET 还是 C# 等效?

VB.NET和C++之间的区别

将 Suprema Biostar C++ 代码转换为 C#