Ale*_*vič 3 c windows api mapping
我在理解如何使用API函数时遇到了问题CreateFileMapping(...).
我一直在尝试映射一个小文件,然后反转它的内容.它只有大约1 Kb,但我一直得到"内存不足"的错误.
我通过调用打开了文件CreateFile并获得了它的大小GetFileSize.
然后我打电话给:
CreateFileMapping(fileHandle,
NULL,
PAGE_READWRITE | SEC_RESERVE,
fileSize + 1,
fileSize + 1,
NULL);
Run Code Online (Sandbox Code Playgroud)
我怀疑问题在于传递fileSize + 1as dwFileOffsetHigh和dwFileOffsetLow,但是我很难理解我应该传递给它的是什么.
任何提示都非常感谢!
dwFileOffsetHigh并且dwFileOffsetLow是两个32位值组合在一起形成一个64位值.这个函数是以这种方式实现的,因为它早于64位值的广泛编译器支持.
我认为你的误解是相信高低平均上限和下限.
在你的情况下你的值(假设fileSize大约是1KB)远远不需要64位,所以你应该传递fileSize+1for dwFileOffsetLow和0for dwFileOffsetHigh.
但是,如果您尝试映射整个文件,则只需传递0两个参数即可.
从文档:
dwMaximumSizeHigh [in]
文件映射对象最大大小的高阶DWORD.
dwMaximumSizeLow [in]
文件映射对象的最大大小的低位DWORD.
如果此参数和dwMaximumSizeHigh为0(零),则文件映射对象的最大大小等于hFile标识的文件的当前大小.
尝试映射长度为0(零)的文件失败,错误代码为ERROR_FILE_INVALID.应用程序应测试长度为0(零)的文件并拒绝这些文件.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |