C ++如何让两个程序进行通信?

时间:2011-04-30 02:52:16

标签: c++ windows qt communication

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

理论情况:

  1. 在Windows PC上,我有一个第三方软件,你用来做东西(比如打开/编辑/保存文件......这不是很重要)。此第三方软件具有可用的 C ++ SDK ,因此您可以为其开发插件。

  2. 我使用GUI开发了一个单独的独立 Windows C ++程序(最有可能使用Qt)。该程序可在与第三方软件相同的Windows计算机上运行。该程序将充当远程控制或发件人。

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

  4. 因此,对于一个基本示例,我可以在我的独立GUI上按下一个按钮,该按钮将与插件通信,然后该插件将打开第三方软件中的指定文件。

    我一直在寻找的是开发独立软件,该软件可以与我为第三方软件开发的插件来回通信。

    最好的方法是什么?我真的不知道从哪里开始或看什么。是否有通用的C ++库使这种类型的东西变得容易?

    我对C ++比较陌生,对Qt来说很新,所以请尽量详细说明。请不要只说“使用共享内存”或类似的东西,因为我不会确切地知道你在说什么。

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

    我在想的一些问题:

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

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

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

    4. 非常感谢任何帮助。我已经对SO上的主题进行了搜索,但没有看到很多关于C ++的问题,而且大部分都没有很多答案,或者不是很清楚,或者没有特别提到使用插件的软件通信第三方计划。

4 个答案:

答案 0 :(得分:4)

有许多解决方案有许多优点和缺点。你必须对每一个进行阅读,以找出最适合你的方法。没有解决方案最适合每个人

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

答案 1 :(得分:1)

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

所以,我可能会开发插件作为服务器,接收命令并使用状态进行响应(嘿,如果你真的想,你甚至可以遵循HTTP标准;)。

if 如果你想进行跨机器通信,它是免费的:)

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

答案 2 :(得分:1)

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

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

如果你想要更低级别,我会使用套接字或命名管道(因为你正在使用Windows)

答案 3 :(得分:0)

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

您可以在SO上搜索这些关键字找到大量信息:IPCRPCsockets