我正在尝试按照 MSDN 上的教程进行操作:Creating Named Shared Memory .
不幸的是,我从 CreateFileMapping()
得到了 NULL
。文件 shmfile.txt
存在于我的文件系统中,所以我认为应该不会出现问题,将创建映射,并且该文件将充当我的共享内存对象。
我做错了什么?
这是我的代码:
...
#define BUF_SIZE 256
TCHAR szName[]=TEXT("C:\\Users\\joe\\shmfolder\\shmfile.txt");
int main(){
HANDLE hMapFile; // filehandle
LPCTSTR pBuf;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError());
return 1;
}
...
}
最佳答案
现在,您告诉 CreateFileMapping
在页面文件中创建映射,然后使用现有文件的名称作为文件映射的名称。
您为文件映射对象指定的名称可以以 local\
或 global\
作为前缀,但不能包含任何其他反斜杠。
如果你想将你预先存在的文件映射为一个共享内存区域,你会按照这个一般顺序做一些事情:
TCHAR szName[]=TEXT("C:\\Users\\joe\\shmfolder\\shmfile.txt");
TCHAR szMapName[]=TEXT("SharedFile");
HANDLE file = CreateFile(szName, ...);
HANDLE mapping = CreateFileMapping(file, ..., szMapName);
关于c++ - CreateFileMapping() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498925/