调用 MapViewOfFile 时出错

Posted

技术标签:

【中文标题】调用 MapViewOfFile 时出错【英文标题】:Error calling MapViewOfFile 【发布时间】:2013-10-12 20:53:51 【问题描述】:

我正在尝试使用需要 DWORD 的函数。

这些是规格:

dwFileOffsetHigh [in]

视图开始的文件偏移量的高位 DWORD。 dwFileOffsetLow [in]

视图开始的文件偏移量的低位 DWORD。这 高低偏移的组合必须指定一个偏移 文件映射。它们还必须匹配内存分配 系统的粒度。也就是说,偏移量必须是的倍数 分配粒度。获取内存分配 系统粒度,使用GetSystemInfo函数,填充 在 SYSTEM_INFO 结构的成员中。

函数因参数错误而失败。

unsigned long lByteStart=200959959;
unsigned long lByteLen=66964224;

MapViewOfFile( *phMapping, FILE_MAP_READ, 0, lByteStart, lByteLen );

我不关心高低或低,因为我不理解它,只是希望它能起作用。

现在它不起作用,有人可以告诉我我做错了什么以及我需要做什么才能正确地做吗?

【问题讨论】:

【参考方案1】:

问题不在于高/低部分,你做对了。问题是“偏移量必须是分配粒度的倍数”。我不认为你是。

分配粒度的典型值是 4096,尽管您应该检查它在您的系统上的值,如报价所述。

【讨论】:

谢谢。我会测试一下。 粒度是 65536 字节,而不是 64kb。 65536 字节和 64kb 是一回事,除非你是 Wikipedia 编辑 :) 您还必须确保CreateFileMapping() 返回的映射足够大以容纳正在查看的整个字节范围,否则查看将失败。

以上是关于调用 MapViewOfFile 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 MapViewOfFile 映射大文件

CreateFileMapping,MapViewOfFile,处理泄漏 C++

CreateFileMapping,MapViewOfFile,如何避免占用系统内存

MapViewOfFile 与线程之间的指针

无法释放 C++ 中 CreateFileMapping 和 MapViewOfFile 创建的共享内存

delphi 大文件的读写 使用 MapviewOffile