1. 程式人生 > 其它 >共享記憶體讀寫

共享記憶體讀寫

void WriteShareMem(string strComData)
{
	wstring strMapName(_T("ShareMemory"));                // 記憶體對映物件名稱
     // 共享記憶體中的資料
	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());
	}
	::UnmapViewOfFile(pBuffer);
	::CloseHandle(hMap);

}
void ReadShareMem(string strComData)
{
	wstring strMapName(_T("ShareMemory"));                // 記憶體對映物件名稱
	// 共享記憶體中的資料
	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());
	}
	else
	{    // 開啟成功,對映物件的一個檢視,得到指向共享記憶體的指標,顯示出裡面的資料
		pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
	 
	}
	::UnmapViewOfFile(pBuffer);
	::CloseHandle(hMap);
}