下面是创建共享内存的进程中的一段代码:
//共享内存 实现进程通讯
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);
}