mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 15:14:59 -06:00
54 lines
981 B
C++
Executable File
54 lines
981 B
C++
Executable File
// Windows/Memory.h
|
|
|
|
#ifndef __WINDOWS_MEMORY_H
|
|
#define __WINDOWS_MEMORY_H
|
|
|
|
namespace NWindows {
|
|
namespace NMemory {
|
|
|
|
class CGlobal
|
|
{
|
|
HGLOBAL m_MemoryHandle;
|
|
public:
|
|
CGlobal(): m_MemoryHandle(NULL){};
|
|
~CGlobal() { Free(); }
|
|
operator HGLOBAL() const { return m_MemoryHandle; };
|
|
void Attach(HGLOBAL hGlobal)
|
|
{
|
|
Free();
|
|
m_MemoryHandle = hGlobal;
|
|
}
|
|
HGLOBAL Detach()
|
|
{
|
|
HGLOBAL h = m_MemoryHandle;
|
|
m_MemoryHandle = NULL;
|
|
return h;
|
|
}
|
|
bool Alloc(UINT flags, SIZE_T size);
|
|
bool Free();
|
|
LPVOID Lock() const { return GlobalLock(m_MemoryHandle); }
|
|
void Unlock() const { GlobalUnlock(m_MemoryHandle); }
|
|
bool ReAlloc(SIZE_T size);
|
|
};
|
|
|
|
class CGlobalLock
|
|
{
|
|
HGLOBAL m_Global;
|
|
LPVOID m_Pointer;
|
|
public:
|
|
LPVOID GetPointer() const { return m_Pointer; }
|
|
CGlobalLock(HGLOBAL hGlobal): m_Global(hGlobal)
|
|
{
|
|
m_Pointer = GlobalLock(hGlobal);
|
|
};
|
|
~CGlobalLock()
|
|
{
|
|
if (m_Pointer != NULL)
|
|
GlobalUnlock(m_Global);
|
|
}
|
|
};
|
|
|
|
}}
|
|
|
|
#endif
|