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

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

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

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

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

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

使用套接字,您不一定与同一台机器上的两个程序相关联。

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

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

有很多方法可以做到这一点,但我认为最好的方法是使用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

我会说套接字消息传递系统。 查看我们的Google协议缓冲区 。

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

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

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