下面是创建共享内存的进程中的一段代码:
//共享内存 实现进程通讯
void CMyupdateDlg::OnFilemapping()
{
HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1000000, "DataMap");
if(!hFile)
{
AfxMessageBox("CreateFileMapping error!");
return;
}
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("alerady exists.");
return;
}
LPBYTE lpData = (LPBYTE)MapViewOfFile(hFile, FILE_MAP_WRITE, 0, 0, 0);
if(!lpData)
{
AfxMessageBox("MapViewOfFile error!");
CloseHandle(hFile);
return;
}
TCHAR buf[1024] = "filemap bbb";
memcpy(lpData, buf, sizeof(buf));
//unlaod
/*
if(lpData)
UnmapViewOfFile(lpData);
if(hFile)
CloseHandle(hFile);
*/
}
下面是一段使用共享内存的进程中的一段代码:
void CAboutDlg::Onfilemap()
{
HANDLE hFile = OpenFileMapping(FILE_MAP_READ, FALSE, "DataMap");
if(!hFile)
{
AfxMessageBox("OpenFileMapping error!");
return;
}
LPBYTE lpData = (LPBYTE)MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0);
if(!lpData)
{
AfxMessageBox("MapViewOfFile error!");
CloseHandle(hFile);
return;
}
TCHAR buf[1024];
memset(buf, 0, sizeof(buf));
memcpy(buf, lpData, sizeof(buf));
AfxMessageBox(buf);
if(lpData)
UnmapViewOfFile(lpData);
if(hFile)
CloseHandle(hFile);
}
本文介绍了一个使用共享内存进行进程间通信的例子。通过创建共享内存区并写入数据,然后在另一个进程中打开该共享内存区并读取数据,实现了进程间的简单通信。
9790

被折叠的 条评论
为什么被折叠?



