我目前尝试使用Windows CreateFileMapping机制实现一些进程间通信.我知道我需要首先使用CreateFileMapping创建文件映射对象,然后使用MapViewOfFile创建指向实际数据的指针.然后,该示例使用CopyMemory将数据放入mapfile.
在我的应用程序中,我有一个图像缓冲区(1 MB大),我想发送到另一个进程.所以现在我查询指向图像的指针,然后将整个图像缓冲区复制到mapfile中.但我想知道这是否真的有必要.是不是可以只在共享内存中复制指向图像缓冲区数据的实际指针?我尝试了一下但没有成功.
不同的进程有不同的地址空间.如果将一个进程中的有效指针传递给另一个进程,它可能会指向第二个进程中的随机数据.所以你必须复制所有数据.
我强烈建议你使用Boost :: interprocess.它有很多好处来管理这种东西,甚至还包括一些特殊的Windows功能,以防你需要与使用特定Win32功能的其他进程进行互操作.
最重要的是使用偏移指针而不是常规指针.偏移指针基本上是相对指针(它们存储指针所在位置和指向的位置之间的差异).这意味着即使两个指针映射到不同的地址空间,只要映射结构相同,那么你就可以了.
我已经使用了各种复杂的数据结构和偏移智能指针,它就像一个魅力.