我正在尝试使用 CreateFileMapping 和 OpenFileMapping 在进程之间共享内存。这不像我想要的那样工作 - OpenFileMapping 返回 null 并且 GetLastError 是 5 - 访问被拒绝。任何想法我做错了什么?名称类似于 MemoryTest。
编辑:
两次使用 CreateFileMapping 我都可以读取在另一个进程中写入的数据。这是一个问题的原因是我收到错误 183 - 内存区域已经存在。但是,它仍会返回现有内存的句柄。
var map_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(int), name.c_str());
....
var handle = MapViewOfFile(map_handle, FILE_MAP_ALL_ACCESS , 0, 0, 0)
*handle = 10;
UnMapViewOfFile(map_handle);
getchar();
其他流程:
var map_handle = OpenFileMapping(PAGE_READWRITE, false, name.c_str())
....
var handle = MapViewOfFile(map_handle, FILE_MAP_ALL_ACCESS , 0, 0, 0) //returns null
var out = *handle;
getchar();
这适用于第二个过程:
var map_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(int), name.c_str());
....
var handle = MapViewOfFile(map_handle, FILE_MAP_ALL_ACCESS , 0, 0, 0) //returns null
var out = *handle;
getchar();