【问题标题】:What are windows IPC methodswindows IPC方法有哪些
【发布时间】:2011-02-12 21:16:34
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    一些常见的有:

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

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        不要忘记Remoting,在 .NET 中实现更高级别的可能性

        【讨论】:

          【解决方案5】:

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

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

          好消息

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

          坏消息

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-21
            • 2011-10-30
            • 2011-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多