我遇到了在Windows 64位
下运行的两个进程之间共享内存的问题目标是共享使用32位进程创建的内存映射,64位进程将写入该映射。
我使用以下命令在32位应用程序下创建内存:
m_hSharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, NULL, BUF_SIZE, memName);
m_pSharedBuf = MapViewOfFile(m_hSharedFile, FILE_MAP_WRITE, 0, 0, 0);
以下用于打开共享内存的64位应用程序:
m_hSharedFile = OpenFileMapping(FILE_MAP_WRITE, FALSE, m_memName.c_str());
m_pSharedBuf = MapViewOfFile(m_hSharedFile, FILE_MAP_WRITE, 0, 0, 0);
(已编辑)问题是64位进程中写入的数据与主机32位进程读取的数据不匹配。
当我尝试运行与32位< - >相同的程序时32位,内存映射工作正常,接收数据没有问题。
我猜这个问题存在于内存寻址中。有没有解决此问题的解决方法?
更新 问题得到解决。表示共享内存的数据结构如下:
struct SH_MEM {
size_t size;
size_t max_size;
/***/
}
我错过了size_t
依赖于架构的事实(32位应用程序为4个字节,64位应用程序为8个字节)。
我使用int32_t
强制数据类型为4个字节(使用头文件cstdint
)。