C#应用程序和非托管C++应用程序之间的进程间通信

6

我有两个Windows服务,第一个是用C#编写的,第二个是用非托管的C++编写的。我想知道如何进行双向进程间通信。

8个回答

8
如果进程间通信总是在同一台机器上进行,命名管道是首选,因为它们比其他选项更快。
然而,如果有即使是最微小的可能性,这种通信可能会在某个时候跨越机器边界,那么就采用套接字方法。对于C ++,您需要winsock2.h头文件。在C#中,请使用System.Net.Sockets命名空间。
已经有一段时间没有做非托管的C ++了,但我的回忆是,如果您在C ++端创建服务器,然后在C#端使用TcpClient类,那么您将需要编写较少的C ++代码。

2

套接字可能是您的最佳选择。

使用套接字,您不一定需要将两个程序绑定到同一台计算机上。

此外,这很可能是最可移植的选项(Windows 甚至为套接字提供了 select() 函数)。


1

套接字和命名管道是托管和非托管环境中得到良好支持的两个选项。


1

1

0

我认为Redis是任何类型的进程间通信的最佳解决方案。


0

使用DCOM/RPC或命名管道 - 其他任何方式都不安全、不专业或两者兼而有之。


0
创建一个单例COM对象。在这个COM对象中维护数据,可以被C++和C#应用程序读取。

C++应用程序如何在不使用COM的情况下读取此对象? - Mike Trader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接