#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string strMapName("ShareMemory"); // 內存映射對象名稱
string strComData("This is common data!"); // 共享內存中的數據
LPVOID pBuffer; // 共享內存指針
// 首先試圖打開一個命名的內存映射文件對象
HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, strMapName.c_str());
if (NULL == hMap)
{ // 打開失敗,創建之
hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
strComData.length()+1,
strMapName.c_str());
// 映射對象的一個視圖,得到指向共享內存的指針,設置裏面的數據
pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
strcpy((char*)pBuffer, strComData.c_str());
cout << "寫入共享內存數據:" << (char *)pBuffer << endl;
}
else
{ // 打開成功,映射對象的一個視圖,得到指向共享內存的指針,顯示出裏面的數據
pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
cout << "讀取共享內存數據:" << (char *)pBuffer << endl;
}
getchar(); // 注意,進程關閉後,所有句柄自動關閉,所以要在這裏暫停
// 解除文件映射,關閉內存映射文件對象句柄
::UnmapViewOfFile(pBuffer);
::CloseHandle(hMap);
system("pause");
return 0;
}