【发布时间】:2015-05-22 12:30:39
【问题描述】:
假设我想为CreateFile 函数生成一个包装函数
这个新函数不会在磁盘上生成一个真实的文件,而是create file mapping object 并返回一个新对象的句柄。
我看过这个例子,Creating Named Shared Memory,并尝试实现我的功能:
#define BUF_SIZE 256
TCHAR szName[] = TEXT("Global\\MyFileMappingObject");
HANDLE MyCreateFile()
{
HANDLE 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
return hMapFile;
}
问题
这对我来说看起来不错,但是,当尝试在 ReadFile 函数中使用返回的 HANDLE 时,我得到错误代码 6 The handle is invalid.
问题
文件映射对象和文件对象可以互换使用吗?如果是这样,那么我的代码有什么问题?如果没有,知道如何实现这样的功能吗?
【问题讨论】:
-
为什么要在命名的内存区域上使用
ReadFile?它应该与MapViewOfFile一起使用。 -
ReadFile只是使用MyCreateFile返回的HANDLE的一个例子。它在这里表明MyCreateFile的实现是错误的,我试图了解原因。
标签: c++ handle createfile file-mapping