什么是Windows IPC方法

时间:2010-04-27 13:53:49

标签: c# .net c++ vb.net dde

问题:我有一个可以在另一个程序中加载的DLL。 现在,dll可以访问其他程序中的所有数据/函数。

现在外部程序可以向该dll发送数据/命令,引导其他程序或从中获取数据,我可以使用哪种技术?

我的意思是,在过去,这意味着DDE,我认为这是在Windows 3.11 / 95次。 我今天可以用什么?哪一个最容易?哪一个最快?

5 个答案:

答案 0 :(得分:6)

一些常见的是:

  • Named Pipes。相当容易实施。
  • Shared Memory。多一点工作,但可能会更快一些(至少在我的测试中)。
  • Sockets。这非常简单,非常便携,但性能不高。但是如果你突然希望能够与在不同机器上运行的进程通信,那肯定会很好。

答案 1 :(得分:4)

COM是当今以Windows为重点的应用程序的事实上的标准IPC机制。

它允许跨语言障碍访问,解决二进制接口兼容性问题,为您进行透明编组,并具有不同的线程模型。

sharptooth很好地总结了一些事实here

答案 2 :(得分:1)

OP提到同时发送数据和命令。如果发送方和接收方都在同一用户帐户中运行,则发送命令的一个不错的选择是定义一条自定义WM_APPWM_USER消息,并与{{ 1}}。 Windows仍然是Windows。

如果接收程序没有窗口,则可以始终为它提供一个不可见的窗口。如果由于某种原因而无法执行此操作,则PostMessage()是后备选项。这不是最佳做法,因为它可以在窗口管理器的权限范围之外工作,但是可以工作。

当然,如果发送者和接收者使用不同的帐户运行,则PostThreadMessage()PostMessage()将无法工作。您必须使用已经提到的支持Windows安全性的其他方法之一。

答案 3 :(得分:0)

不要忘记Remoting,以获得.NET中更高级别的可能性

答案 4 :(得分:0)

对于简单快速的沟通,您可以考虑Mailslots。它们非常易于使用。您可以像对待文件一样与它们进行交互。

Mailslots 最适合用于向多个收件人广播命令,或从多个制作人接收邮件,并且您的设计可以容忍偶尔丢失的邮件。如上所述,命名管道更适合单个过程到单个过程,保证交付IPC。

好消息

  • 他们非常容易实施
  • 他们支持异步操作
  • 即使给定Windows进程隔离,也可以使用它们。这意味着您可以使用它们在不同的用户会话之间进行通信(例如,使用Windows服务)
  • 他们可以通过打开邮箱到“\ * \ mailslot [path] name”来向整个域广播消息。当您使用这样的名称写入邮件槽时,它会将其发送到您域中每台计算机上该名称的每个邮箱。

坏消息

  • 只能通过网络传输424个字节。可以在本地传输更多数据
  • 它们是基于UDP的,所以只有在不时丢失消息时才使用它们
  • 偶尔(特别是在多处理器系统上),消息可能会轻微无序传递

有许多样本可供使用,但我还没有足够的代表发布超过一个 C ++中的on CodeProject