c/c++常用代码 -- 共享内存
#pragma once #include <stdio.h> #include <tchar.h> #include <string.h> #include <windows.h> template<class T> class CMySM { public: CMySM() { m_pMem = NULL; m_hMem = NULL; } ~CMySM() { Close(); } BOOL Create(LPCTSTR szName) { if (szName == NULL || _tcslen(szName) == 0) return FALSE; do { m_hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, sizeof(T), szName); if (m_hMem == NULL) break; m_pMem = MapViewOfFile(m_hMem, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (m_pMem == NULL) break; memset(m_pMem, 0, sizeof(T)); return TRUE; } while (FALSE); Close(); return FALSE; } BOOL Open(LPCTSTR szName) { if (szName == NULL || _tcslen(szName) == 0) return FALSE; do { m_hMem = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName); if (m_hMem == NULL) break; m_pMem = MapViewOfFile(m_hMem, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (m_pMem == NULL) break; return TRUE; } while (FALSE); Close(); return FALSE; } void Close() { if (m_pMem != NULL) { UnmapViewOfFile(m_pMem); m_pMem = NULL; } if (m_hMem != NULL) { CloseHandle(m_hMem); m_hMem = NULL; } } inline T* Get(){return (T*)m_pMem;} public: PVOID m_pMem; HANDLE m_hMem; };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步