【问题标题】:Interprocess Communication Between C# application and unmanaged C++ applicationC# 应用程序和非托管 C++ 应用程序之间的进程间通信
【发布时间】:2010-10-07 02:18:59
【问题描述】:

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

【问题讨论】:

    标签: c# c++ ipc


    【解决方案1】:

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

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

    自从我完成非托管 C++ 以来已经有一段时间了,但我记得如果你在 C++ 端创建服务器然后在 C# 端使用 TcpClient 类,你将不得不编写更少的 C++ 代码.

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                • C++ 应用程序如何在不使用 COM 的情况下读取此对象?
                【解决方案8】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-02-10
                  • 2010-11-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多