在Windows中共享32位和64位进程之间的内存

时间:2016-04-19 13:48:00

标签: c++ memory

我遇到了在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)。

0 个答案:

没有答案