C# 什么是windows IPC方法

C# 什么是windows IPC方法,c#,.net,c++,vb.net,dde,C#,.net,C++,Vb.net,Dde,问题:我有一个dll,可以加载到另一个程序中。 现在dll可以访问其他程序中的所有数据/函数 我可以使用哪种技术,现在外部程序可以向该dll发送数据/命令,引导另一个程序,或从中获取数据 我的意思是,在过去,这意味着DDE,我认为这是回到Windows3.11/95时代。 我今天能用什么?哪一个最容易?哪个最快?一些常见的是: 。相当容易实现 。多做一点工作,但可能会快一点(至少在我的测试中) 。这是相当简单和非常便携,但没有高性能。但是,如果您突然想要能够与运行在不同机器上的进程进行通信,这

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

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

我的意思是,在过去,这意味着DDE,我认为这是回到Windows3.11/95时代。 我今天能用什么?哪一个最容易?哪个最快?

一些常见的是:

  • 。相当容易实现
  • 。多做一点工作,但可能会快一点(至少在我的测试中)
  • 。这是相当简单和非常便携,但没有高性能。但是,如果您突然想要能够与运行在不同机器上的进程进行通信,这当然是件好事
是当今Windows应用程序事实上的标准IPC机制

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


总结了一些事实。

不要忘记,对于.NET

更简单的可能性,对于简单、快速的通信,你可以考虑。它们很容易使用。你与他们互动就像你与一个文件互动一样

当您希望向多个收件人广播命令,或接收来自多个生产者的消息,并且您的设计可以容忍偶尔丢失的消息时,邮件槽最为合适。上面提到的命名管道更适合于单进程到单进程、有保证的交付

好消息

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

  • 网络上只能传输424字节。更多数据可以在本地传输
  • 它们是基于UDP的,因此只有在偶尔丢失消息时才可以使用它们
  • 偶尔(特别是在多处理器系统上),消息的传递可能会稍微有点混乱
很多样品都有,但是我没有足够的代表来发布更多的样品
在C++中,OP提到同时发送数据和命令。如果发送方和接收方都在同一个用户帐户中运行,发送命令的最佳选择是定义自定义
WM\u应用程序
WM\u用户
消息,并使用
PostMessage()
传递消息。Windows仍然是Windows

如果接收程序没有窗口,您可以给它一个不可见的窗口。如果由于某种原因无法执行此操作,
PostThreadMessage()
是一个备用选项。这不是一种最佳实践,因为它不在窗口管理器的权限范围内工作,但确实有效


当然,如果发送方和接收方在不同的帐户中运行,
PostMessage()
postmreadmessage()
将不起作用。您必须使用前面提到的支持Windows安全性的其他方法之一。

为了完成此列表,我将提到MSDN的链接,其中列出了所有可用的方法。我认为最好的两种方法是Pipes和SharedMemory,尽管我到目前为止没有比较它们的性能,也没有与此实现进行比较,特别是对于C#,共享内存似乎是最快和最简单的,尽管我不知道它是否允许像管道一样通过网络进行通信。似乎这两个链接最终允许每个人选择最合适的方法,这里可以找到一些优缺点-