共享内存读写

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);
}

  共享内存必须在两个程序全部启动的情况下 读取写入

posted @ 2021-11-10 19:43  xmydis  阅读(476)  评论(0)    收藏  举报