调用 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 时出错的主要内容,如果未能解决你的问题,请参考以下文章
CreateFileMapping,MapViewOfFile,处理泄漏 C++
CreateFileMapping,MapViewOfFile,如何避免占用系统内存