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将是任何类型的进程间通信的最佳解决方案