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

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

理论情况:

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

  2. 我开发了一个独立的 Windows C ++程序(最有可能使用Qt)与GUI。 该程序与第三方软件在同一台Windows电脑上运行。 这个程序将作为一个遥控器或发件人。

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

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

我最基本的要求就是开发一个独立的软件,可以与我为第三方软件开发的插件进行交stream。

什么是最好的办法呢? 我真的不知道从哪里开始,或者看什么。 有没有常见的C ++库,使这种types的事情容易?

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

该程序不会在一台单独的计算机上运行,​​所以在这里我不认为networking的东西是必要的。

我正在考虑的一些问题:

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

  2. 如果我已经有我的独立软件运行并打开第三方软件,插件是否需要注册或find我的独立软件进行通信?

  3. 如果我已经有第三方软件运行,然后打开我的独立软件,它必须扫描插件,看看它的运行或如何find它?

任何帮助将不胜感激。 我已经做了关于这个话题的search,但没有看到许多C ++的具体问题,其中大多数没有太多的答案,或不是很清楚,或没有专门提到与插件的软件通信第三方程序。

有许多利弊的解决方案。 你将不得不做一些阅读每一个工作,哪个是最适合你的。 没有解决方案是最好的每个人

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

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

所以,我可能会开发插件作为一个服务器,接收命令和状态响应(嘿,你甚至可以按照HTTP标准,如果你真的想;))。

如果你想做跨机器通讯,那就免费:)

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

如果你使用Qt,我相信它有一个插件的概念: 如何创建Qt插件

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

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

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

通过在SO: IPC , RPC , 套接字上搜索这些关键字,您可以找到大量的信息。