【发布时间】:2011-05-21 15:49:28
【问题描述】:
我现在一直在从事一些 C++ 项目,其中涉及使用窗口消息进行一些简单的 IPC。在许多情况下,通过将数据放入共享内存段,然后使用SendMessage 调用将指针传递到共享内存,窗口消息会传递一些额外的数据。一直重复这样做很烦人,但在通过发明另一个 IPC 系统来解决这种无聊的重复之前,我想问一下:
是否存在满足标准的现有框架?:
- 用 C 或 C++ 编写(我们在这里使用 MSVC)
- 尽可能少的依赖;在最好的情况下,它只是一些使用普通 C++ 和 Windows 标准库的源文件,可以直接编译到应用程序/库中。
- 适用于 Windows XP 及更高版本
- 建立在窗口消息和共享内存段的基础上
- 非常需要正确的错误报告(远程进程消失、远程进程不理解给定消息、参数不匹配等)
对于它的价值,COM 对我们来说并不是一个真正的选择,因为使用它非常痛苦(除非您开始在它之上使用我们希望避免的各种包装器)。我真的不需要接口和所有这些东西。只是一种方便的方式来来回发送带有(在最好的情况下是任意的)参数的消息,并进行一些错误处理。另外,我放弃了 DBUS,因为我做的比我需要的多。
【问题讨论】:
-
我不明白为什么使用 COM 会很痛苦,尤其是当您使用 ATL 时(就像您在 MSVC++ 上所做的那样)。
-
@Billy ONeal:ATL 是我在编写
unless you start using all kinds of wrappers on top of it which we'd like to avoid时想到的基于 COM 的框架之一。 -
@French: Err.. 我的意思是 你 不必编写任何类型的包装器。已经为你写好了。
-
“建立在窗口消息和共享内存段之上” - 这是一个奇怪的标准。为什么解决方案需要展示特定的实现细节?可以围绕SendMessage、WM_COPYDATA 和序列化(参见Using Data Copy)构建一个极其简单的解决方案。