C# 什么是windows IPC方法
问题:我有一个dll,可以加载到另一个程序中。 现在dll可以访问其他程序中的所有数据/函数 我可以使用哪种技术,现在外部程序可以向该dll发送数据/命令,引导另一个程序,或从中获取数据 我的意思是,在过去,这意味着DDE,我认为这是回到Windows3.11/95时代。 我今天能用什么?哪一个最容易?哪个最快?一些常见的是:C# 什么是windows IPC方法,c#,.net,c++,vb.net,dde,C#,.net,C++,Vb.net,Dde,问题:我有一个dll,可以加载到另一个程序中。 现在dll可以访问其他程序中的所有数据/函数 我可以使用哪种技术,现在外部程序可以向该dll发送数据/命令,引导另一个程序,或从中获取数据 我的意思是,在过去,这意味着DDE,我认为这是回到Windows3.11/95时代。 我今天能用什么?哪一个最容易?哪个最快?一些常见的是: 。相当容易实现 。多做一点工作,但可能会快一点(至少在我的测试中) 。这是相当简单和非常便携,但没有高性能。但是,如果您突然想要能够与运行在不同机器上的进程进行通信,这
- 。相当容易实现
- 。多做一点工作,但可能会快一点(至少在我的测试中)
- 。这是相当简单和非常便携,但没有高性能。但是,如果您突然想要能够与运行在不同机器上的进程进行通信,这当然是件好事
总结了一些事实。
不要忘记,对于.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#,共享内存似乎是最快和最简单的,尽管我不知道它是否允许像管道一样通过网络进行通信。似乎这两个链接最终允许每个人选择最合适的方法,这里可以找到一些优缺点-