在C / C ++ for Windows中,基于内存的轻量级IPC机制是什么?

我一直在研究几个C ++项目,其中涉及使用窗口消息来做一些简单的IPC。 在许多情况下,通过将数据放入共享内存段,然后使用SendMessage调用将指针传递到共享内存,会将一些额外数据与窗口消息一起传递。 重新做这件事总是令人讨厌,但在解决这个沉闷的重复之前,我想问一下发明又一个IPC系统:

是否有一个满足标准的现有框架?

  • 用C或C ++编写(我们在这里使用MSVC)
  • 尽可能less依赖; 在最好的情况下,它只是一些使用普通C ++和Windows标准库的源文件,并且可以直接编译到应用程序/库中。
  • 适用于Windows XP及更新版本
  • build立在窗口消息加上一个共享内存段
  • 适当的错误报告将是非常需要的(远程过程不见了,远程过程不理解给定的消息,参数不匹配等)

值得一提的是,COM对我们来说并不是一个真正的select,因为使用COM是非常痛苦的(除非你开始使用我们希望避免的各种包装)。 我不需要接口和所有的东西, 只是一个方便的方式来发送消息(在最好的情况下任意)来回参考一些error handling。 另外,我放弃了比我更需要的DBUS。

虽然不符合你所有的标准,但ZeroMQ(http://www.zeromq.org/)可能值得一看。 它小巧,简单,快捷。 它也给你消息传递的语义,这可能会有所帮助,取决于你正在使用的应用程序的类型

我已经成功使用内存映射文件进行进程间通信。 我喜欢它,主要是因为它很简单,快速,并可以在任何版本的窗口,你可能会遇到(嗯,我怀疑它会在Win9x上工作,但….)

http://msdn.microsoft.com/en-us/library/ms810613.aspx上有一篇基本的文章(1993年的writtin!),展示了如何使用它们。

这个问题在这个答案的时候已经快3岁了,但我不敢相信没有人正式提出Boost.Interprocess 。

WINAPI机制的轻量级,IPC和C ++包装是可用的。