1

我正在尝试遵循 MSDN 上的本教程:创建命名共享内存

不幸的是,我NULLCreateFileMapping(). 该文件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;
    }
    ...
}
4

1 回答 1

5

现在,您要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);
于 2013-10-21T15:53:09.357 回答