请教MapViewOfFile函数的问题

agentina 2003-10-16 04:51:41
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // handle to file-mapping object
DWORD dwDesiredAccess, // access mode
DWORD dwFileOffsetHigh, // high-order DWORD of offset
DWORD dwFileOffsetLow, // low-order DWORD of offset
SIZE_T dwNumberOfBytesToMap // number of bytes to map
);

为何当我对dwFileOffsetHigh和dwFileOffsetLow设的值不为0的时候
返回值总是NULL

GetLastError的结果是0x0000046C

解释是“指定的基址或文件偏移量没有适当对齐。”

以下是我的错误Code

m_hMap=::CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE,NULL,
PAGE_READWRITE,0,0xFFFF,m_csMapName.GetBuffer(m_csMapName.GetLength()));

if (m_hMap==NULL)
{
DWORD dwError=GetLastError();
TRACE("Error is %l L\n",dwError);
return FALSE;
}

LPVOID lView=MapViewOfFile(m_hMap,FILE_MAP_ALL_ACCESS,HIDWORD(dwOffset),
LODWORD(dwOffset),dwContentSize);

if (lView==NULL)
{
DWORD dwError=GetLastError();
return;
}


请那位高手指点一下
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
agentina 2003-10-17
  • 打赏
  • 举报
回复
太感谢你了
多谢
这就结贴
boywang 2003-10-16
  • 打赏
  • 举报
回复
当将一个文件视图映射到进程的地址空间中时,必须规定两件事情。首先,必须告诉系统,
数据文件中的哪个字节应该作为视图中的第一个字节来映射。你可以使用d w F i l e O ff s e t H i g h和
d w F i l e O ff s e t L o w参数来进行这项操作。由于Wi n d o w s支持的文件最大可达1 6 E B,因此必须用
一个6 4位的值来设定这个字节的位移值。这个6 4位值中,较高的3 2位传递给参数
d w F i l e O ff s e t H i g h,较低的3 2位传递给参数d w F i l e O ff s e t L o w。

注意,文件中的这个位移值必须是系统的分配粒度的倍数(迄今为止,Wi n d o w s的所有实现代码的分配粒度均为64 KB)。第1 4章介绍了如何获取某个系统的分配粒度。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧