c++ - CreateFileMapping() 返回 null

标签 c++ winapi

我正在尝试按照 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/

相关文章:

c++ - `Scheduler::_singleton' 的多重定义,导入 header 两次

c++ - 通过 QProcess 执行 VBS 从不发出 readyStandardOutPut

winapi - 我是否需要调用 SelectObject() 来恢复使用 GetStockObject() 检索的对象?

c++ - HTTP post 和 wininet

c++ - 在 Windows 上从 SYSTEM 服务获取用户文档文件夹。 C++

c++ - 有 C++ 标准库 ifdef 或 ifndef 预处理器指令吗?

c++ - 如何避免在循环内破坏和重新创建线程?

c# - 类型转换和继承的乐趣

windows - 了解 SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT

c - 多线程单服务器多客户端应用程序中的阻塞套接字与非阻塞套接字