51 m_boCanClose = boCanClose;
63 if ( m_lpvMapAdds != NULL )
65 ::UnmapViewOfFile(m_lpvMapAdds);
88 if ( m_lpvMapAdds != NULL )
105 int Open(LPCTSTR lpszMemName, UINT uMemSize)
107 if ( m_lpvMapAdds != NULL )
113 m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, uMemSize, lpszMemName);
114 if ( m_hFileMap != NULL )
117 DWORD dwError = ::GetLastError();
119 m_lpvMapAdds = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
120 if ( m_lpvMapAdds != NULL )
122 return (dwError == ERROR_ALREADY_EXISTS) ? 1 : 0;
125 _GetLastError(
"MapViewOfFile");
126 ::CloseHandle(m_hFileMap);
132 _GetLastError(
"CreateFileMapping");
146 if ( m_lpvMapAdds == NULL )
151 if ( ! ::UnmapViewOfFile(m_lpvMapAdds) )
157 if ( m_hFileMap != 0 )
159 if ( ! ::CloseHandle(m_hFileMap) )
213template<
typename TYP>
263 m_boCanClose = boCanClose;
280 return m_pType != NULL;
298 operator const TYP*(void)
const
338 int iRc = m_cSharedMem.
Open(lpMemName,
sizeof(LONG) * 2 +
sizeof(TYP));
343 LONG* P =
static_cast<LONG*
>(m_cSharedMem.
Get());
344 m_pType =
reinterpret_cast<TYP*
>(&P[2]);
348 if ( piListener != NULL )
350 piListener->OnAction(m_pType);
375 LONG* P =
static_cast<LONG*
>(m_cSharedMem.
Get());
376 if ( P == NULL ){
return; }
383 if ( ::InterlockedDecrement(&P[0]) == 0 )
388 if ( ::InterlockedDecrement(&P[1]) <= 0 )
391 if ( piListener != NULL )
393 piListener->OnAction(m_pType);
395 if ( ! m_boCanClose )
404 m_cSharedMem.
Close();
410 m_cSharedMem.
Close();
bool Close(void)
[操作] クローズ.
CSharedMemoryManager(bool boCanClose=false)
コンストラクタ
LPVOID Get(void)
[取得] アドレス参照.
bool HasMemory(void)
[確認] 共有メモリの有無
virtual ~CSharedMemoryManager(void)
デストラクタ
int Open(LPCTSTR lpszMemName, UINT uMemSize)
[操作] オープン
void Close(IListener *piListener=NULL)
[操作] クローズ
bool HasMemory(void) const
[確認] 共有メモリの有無
virtual ~CSharedStructT(void)
デストラクタ
const TYP * operator->(void) const
[取得] メモリの参照.
bool Open(LPCTSTR lpMemName=NULL, IListener *piListener=NULL)
[操作] オープン
CSharedStructT(bool boCanClose=true)
コンストラクタ
TYP * operator->(void)
[取得] メモリの参照.
virtual ~IListener(void)
デストラクタ
virtual void OnAction(TYP *P)=0
[通知] アクション発生