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

时间:2009-02-12 03:36:45

标签: c# c++ ipc

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

8 个答案:

答案 0 :(得分:7)

如果进程间通信总是在同一台机器上完成,那么命名管道就是可行的方法,因为它们比其他选项更快。

但是,如果在某些时候跨机器边界发生此通信的可能性甚至最小,请使用套接字方法。对于C ++,您需要winsock2.h头文件。在C#中,使用System.Net.Sockets命名空间。

自从我完成了非托管C ++以来已经有一段时间了,但我的回忆是,如果在C ++端创建服务器,然后在{+}}类上使用TcpClient类,则必须编写更少的C ++代码。 C#侧。

答案 1 :(得分:2)

套接字可能是你最好的选择。

使用套接字时,您不必将两个程序都绑定在同一台计算机上。

此外,它可能是最便携的选项(哎呀,Windows甚至有套接字的select())。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

有很多方法可以做到这一点,但我认为最好的方法是使用WCF和COM +。如果您在COM +中托管服务,则可以通过.NET服务中的WCF以及非托管代码中的COM接口访问它。

您可能需要查看MSDN文档的以下部分才能开始使用:

将WCF服务与COM +集成: http://msdn.microsoft.com/en-us/library/bb735856.aspx

与COM +应用程序集成概述: http://msdn.microsoft.com/en-us/library/ms734723.aspx

答案 4 :(得分:1)

我会说套接字是一个消息传递系统。查看我们的Google Protocol Buffers

答案 5 :(得分:0)

使用DCOM / RPC或命名管道 - 其他任何东西都是不安全的,hacky或两者兼而有之。

答案 6 :(得分:0)

创建Singleton COM对象。维护此COM对象中的数据,C ++和C#应用程序都可以读取这些数据。

答案 7 :(得分:0)

我会说redis将是任何类型的进程间通信的最佳解决方案