#define FILEMAPPINGNAME L"xxx" template <typename _T> class CMemroySharePtr { public: CMemroySharePtr() :m_hMappingHdr(NULL) ,m_pMappingFile(NULL) { if ((m_hMappingHdr == NULL) && (m_pMappingFile == NULL)) { m_hMappingHdr = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(_T), FILEMAPPINGNAME); if ((m_hMappingHdr != NULL) && (GetLastError() == ERROR_ALREADY_EXISTS)) { m_pMappingFile = (_T*)MapViewOfFile(m_hMappingHdr,FILE_MAP_ALL_ACCESS,0,0,0); } else if (m_hMappingHdr != NULL) { m_pMappingFile = (_T*)MapViewOfFile(m_hMappingHdr,FILE_MAP_ALL_ACCESS,0,0,0); if (m_pMappingFile != NULL) { ZeroMemory(m_pMappingFile, sizeof(_T)); _T temp; *m_pMappingFile = temp; } } } } ~CMemroySharePtr() { if (m_pMappingFile != NULL) { UnmapViewOfFile(m_pMappingFile); m_pMappingFile = NULL; } if (m_hMappingHdr != NULL) { CloseHandle(m_hMappingHdr); m_hMappingHdr = NULL; } } _T* const operator->() throw() { return m_pMappingFile; } operator bool() { return (m_pMappingFile != NULL)?true:false; } private: HANDLE m_hMappingHdr; _T* m_pMappingFile; };