【发布时间】:2013-10-21 15:40:42
【问题描述】:
我正在尝试遵循 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;
}
...
}
【问题讨论】:
-
您应该首先
CreateFile()获取文件的句柄,然后调用CreateFileMapping()并将文件句柄作为第一个参数。并确保您调用的是正确版本的函数(CreateFileMappingA()用于 ANSI 字符串,CreateFileMappingW()用于宽字符串)。