问题:我有一个可以加载到另一个程序中的 dll。现在 dll 可以访问其他程序中的所有数据/函数。
我可以使用哪种技术,现在外部程序可以向该 dll 发送数据/命令,引导其他程序或从中获取数据?
我的意思是,在过去这意味着 DDE,我认为那是在 Windows 3.11/95 时代。我今天可以使用什么?哪一个最容易?哪个最快?
OP 提到了发送数据和命令。如果发送者和接收者都在同一个用户帐户中运行,发送命令的一个很好的选择是定义一个自定义WM_APP
或WM_USER
消息并使用PostMessage()
. Windows 仍然是 Windows。
如果接收程序没有窗口,你总是可以给它一个不可见的窗口。如果由于某种原因您无法做到这一点,这PostThreadMessage()
是一个后备选项。这不被认为是最佳实践,因为它在窗口管理器的范围之外工作 - 但它确实有效。
当然如果发送方和接收方运行在不同的帐户中,PostMessage()
将PostThreadMessage()
无法正常工作。您必须使用已经提到的支持 Windows 安全性的其他方法之一。
不要忘记Remoting,以获得 .NET 中更高级别的可能性
对于简单、快速的通信,您可以考虑使用Mailslots。它们非常易于使用。您可以像处理文件一样与它们交互。
当您想要向多个收件人广播命令或接收来自多个生产者的消息并且您的设计可以容忍偶尔丢失的消息时,邮槽是最合适的。上面提到的命名管道更适合单进程到单进程、保证交付的 IPC。
好消息
坏消息
有很多示例可用,但我还没有足够的代表 在 C++中的 CodeProject 上发布更多示例