在同一系统上的两个应用程序之间传递数据的首选方法是什么?

时间:2010-08-12 17:08:10

标签: c++ sockets dll networking

我有一个应用程序(A)需要启动另一个应用程序(B)。我需要在应用程序之间传递数据。我可以想到两种方法。首先是打开一个插座。第二种是通过dll共享数据。

开放套接字的方法很简单。

dll方法我有一些问题吗?我可以将插件dll加载到B.我想创建一个A可以用来将数据传递给B的dll。加载dll时,只加载了一个dll实例?如果是这样,这是否意味着可以在加载DLL的应用程序之间共享数据?

什么是更好的选择?

还有其他方法吗?

6 个答案:

答案 0 :(得分:13)

您无法通过DLL有效地共享数据。其他方式:

  • 磁盘文件
  • 共享内存
  • 消息
  • RPC
  • CORBA
  • COM

答案 1 :(得分:5)

最简单的方法(假设Windows,因为你提到了一个DLL)可能是使用CreateProcess并打开子进程的管道,如下面的简化形式所述:http://msdn.microsoft.com/en-us/library/ms682499.aspx

命名管道可以替代,特别是如果您无法控制所有进程的生命周期。 http://msdn.microsoft.com/en-us/library/aa365590.aspx

对于简单的情况,邮件槽可能是一个充分的选择。

http://msdn.microsoft.com/en-us/library/aa365574.aspx#base.using_a_mailslot_for_ipc

这是Windows的各种进程间通信技术的更长列表。 http://msdn.microsoft.com/en-us/library/aa365574.aspx

对于本地发生的事情,使用套接字似乎有点矫枉过正。此外,您必须实施自己的安全机制以防止欺骗攻击,而不是依赖于大多数其他IPC方法的集成安全机制。

答案 2 :(得分:1)

总是很好地探索其他可能的解决方案,但我个人认为使用套接字作为应用程序之间数据的传输层不仅是未来的证明,也是可扩展的。使用套接字将无需编写大量特定于操作系统的代码,这可能会导致您将来将应用程序移植到非Windows操作系统。

我会建议套接字。

答案 3 :(得分:0)

您可以拥有可以监听的共享缓存(例如Windows服务或隐藏进程) - 将数据返回给所有订阅者。这使用观察者模式方法。

答案 4 :(得分:0)

我同意Juan Zamora M,但提供数据的服务应该有一个API,可以在需要时通过监听器更改时不需要推送。

答案 5 :(得分:0)

这可能会有所帮助。 Sharing Files and Memory