共享記憶體讀寫
阿新 • • 發佈:2021-11-10
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); }