VC++里怎么样映射内存?如何访问?

doudou80923 2004-06-29 09:08:48
如题
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taianmonkey 2004-07-09
  • 打赏
  • 举报
回复
下面是一个例子:
void CreateHugeFile(LPCTSTR strFileName, long nFileLen)
{
HANDLE hFile;
hFile = CreateFile(
strFileName,//"C:\\Temp\\Test.dat",
GENERIC_WRITE, //必须有此权限
0,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);

if( hFile == INVALID_HANDLE_VALUE )
{
//处理出错信息
//获得信息
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );

//显示
::MessageBox(0, (LPCTSTR)lpMsgBuf, _T("GetLastError"), MB_OK|MB_ICONINFORMATION );
//lpMsgBuf中是你要的错误提示.

//释放内存
::LocalFree( lpMsgBuf );

return;
}


DWORD dwPtr = SetFilePointer(
hFile,
nFileLen,//0x02800000, // 200 M
NULL,
FILE_BEGIN);
if (dwPtr == 0xFFFFFFFF)
{
// 处理出错信息
//获得信息
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );

//显示
::MessageBox(0, (LPCTSTR)lpMsgBuf, _T("GetLastError"), MB_OK|MB_ICONINFORMATION );
//lpMsgBuf中是你要的错误提示.

//释放内存
::LocalFree( lpMsgBuf );

return;

} // End of error handler


SetEndOfFile(hFile);
CloseHandle(hFile);
}
doudou80923 2004-07-09
  • 打赏
  • 举报
回复
如果我已经知道段和偏移量,那应用程序代码里怎么样才能访问到?
smallsword 2004-07-09
  • 打赏
  • 举报
回复
也可以在DLL中开个共享内存,两个进程加载
doudou80923 2004-07-09
  • 打赏
  • 举报
回复
好啊 !!谢谢啦!!
Summer1314 2004-06-29
  • 打赏
  • 举报
回复
CreateFileMapping(), OpenFileMapping, MapViewOfFile, CloseHandle
常用的几个API,看看MSDN吧,我用VC做过,在两个进程间通讯,用的就是内存映射,想要的话可以给你

2,643

社区成员

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

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