繁体   English   中英

什么是windows IPC方法

[英]What are windows IPC methods

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

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

我的意思是,过去这意味着 DDE,我认为那是在 Windows 3.11/95 时代。 我今天可以使用什么? 哪一个最简单? 哪个最快?

一些常见的有:

  • 命名管道 相当容易实施。
  • 共享内存 多一点工作,但可能会快一点(至少在我的测试中)。
  • 插座 这相当简单且非常便携,但性能不高。 但是,如果您突然希望能够与运行在不同机器上的进程进行通信,那肯定很好。

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

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

尖牙在这里很好地总结了一些事实。

OP 提到发送数据和命令 如果发送方和接收方都在同一个用户帐户中运行,发送命令的一个很好的选择是定义自定义WM_APPWM_USER消息并使用PostMessage()传递它。 Windows 仍然是 Windows。

如果接收程序没有窗口,你总是可以给它一个不可见的窗口。 如果由于某种原因你不能这样做, PostThreadMessage()是一个后备选项。 这不被认为是最佳实践,因为它在窗口管理器的权限之外工作 - 但它确实有效。

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

对于简单、快速的通信,您可以考虑Mailslots 它们非常易于使用。 您可以像处理文件一样与它们交互。

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

好消息

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

坏消息

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

有许多示例可用,但我没有足够的代表在 C++ 中的CodeProject 上发布更多示例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM