【问题标题】:C++ How to make two programs communicate?C++如何让两个程序通信?
【发布时间】:2011-08-15 21:33:01
【问题描述】:

问题:让两个程序(都在同一台计算机上运行)进行通信和交互的最佳方式是什么? (Windows、C++)

理论情况:

  1. 在 Windows PC 上,我有一个第三方软件,您可以用它来做一些事情(例如打开/编辑/保存文件...这并不重要)。此第三方软件有一个可用的C++ SDK,因此您可以为其开发插件。

  2. 我开发了一个带有 GUI 的单独 独立 Windows C++ 程序(很可能使用 Qt)。该程序与第 3 方软件在同一台 Windows 计算机上运行。该程序将充当遥控器或发送者。

  3. 使用 3rd 方软件的 SDK,我为 3rd 方软件 开发了一个小型 插件。该程序充当接收器,因此我的 Qt GUI 可以发送该插件将接收的命令,从而相应地远程控制第 3 方软件

因此,作为一个基本示例,我可以在独立 GUI 上按下一个按钮,该按钮将与插件通信,然后在 3rd 方软件中打开指定文件。

我实际上在寻找的是开发独立软件,该软件可以与我为第 3 方软件开发的插件来回通信。

最好的方法是什么?我真的不知道从哪里开始或看什么。有没有常见的 C++ 库可以让这类事情变得简单?

我对 C++ 比较陌生,对 Qt 也很陌生,所以请尝试详细说明。请不要只说“使用共享内存”或类似的话,因为我不知道你在说什么。

该程序不会在单独的计算机上运行,​​因此我认为这里不需要网络东西。

我正在思考的一些问题:

  1. 如果用户同时打开了多个第三方软件副本怎么办。我的独立软件如何知道与哪一个通信?

  2. 如果我已经运行了独立软件并打开了第 3 方软件,插件是否必须以某种方式注册或找到我的独立软件才能与之通信?

  3. 如果我已经运行了第 3 方软件,然后打开我的独立软件,它是否必须扫描插件以查看其是否在运行或如何找到它?

任何帮助将不胜感激。我已经对 SO 的主题进行了搜索,但没有看到很多专门针对 C++ 的问题,而且大多数问题没有太多答案,或者不是很清楚,或者没有专门提到与插件的软件通信第三方程序。

【问题讨论】:

    标签: c++ windows qt communication


    【解决方案1】:

    有许多优点和缺点的解决方案。您将不得不对每个内容进行一些阅读,以找出最适合您的内容。没有适合所有人的解决方案

    这是一个很好的起点http://msdn.microsoft.com/en-us/library/aa365574(v=vs.85).aspx

    【讨论】:

      【解决方案2】:

      老实说,我很可能会采用基于网络的方法。它将独立软件和插件解耦,因此,只要通信协议匹配,您就可以轻松地将插件挂接到任意数量的其他实用程序或脚本中。

      所以,我可能会开发插件来充当服务器,接收命令并响应状态(嘿,如果你真的愿意,你甚至可以遵循 HTTP 标准;))。

      而且如果你曾经想进行跨机通信,它是免费的:)

      当然,根据软件和使用情况,我会加密通信。

      【讨论】:

        【解决方案3】:

        如果你使用 Qt,我相信它有 Plugin 的概念:How to Create Qt Plugins

        否则,COM 工作正常。对于 C++ ,我会使用 ATL 库,但 Qt 中也有 COM 支持。

        如果您想更底层,我会使用套接字或命名管道(因为您使用的是 Windows)

        【讨论】:

        • @Jakobud - 你的问题很长,因此我的误解。如果两个程序之间的关系是结构化且丰富的(例如使用对象模型),我会使用 COM。如果它很简单(又名:读/写数据场景),我会使用命名管道或套接字。
        【解决方案4】:

        我会使用套接字来在您的远程控制应用程序和服务器应用程序之间建立通信。

        通过在 SO:IPCRPCsockets 上搜索这些关键字,您会发现大量信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 2020-06-04
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 2016-07-27
          相关资源
          最近更新 更多