Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Windows/MemoryGlobal.h')
-rw-r--r--CPP/Windows/MemoryGlobal.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/CPP/Windows/MemoryGlobal.h b/CPP/Windows/MemoryGlobal.h
new file mode 100644
index 00000000..3f44f742
--- /dev/null
+++ b/CPP/Windows/MemoryGlobal.h
@@ -0,0 +1,53 @@
+// Windows/MemoryGlobal.h
+
+#ifndef __WINDOWS_MEMORY_GLOBAL_H
+#define __WINDOWS_MEMORY_GLOBAL_H
+
+namespace NWindows {
+namespace NMemory {
+
+class CGlobal
+{
+ HGLOBAL _global;
+public:
+ CGlobal(): _global(NULL){};
+ ~CGlobal() { Free(); }
+ operator HGLOBAL() const { return _global; };
+ void Attach(HGLOBAL hGlobal)
+ {
+ Free();
+ _global = hGlobal;
+ }
+ HGLOBAL Detach()
+ {
+ HGLOBAL h = _global;
+ _global = NULL;
+ return h;
+ }
+ bool Alloc(UINT flags, SIZE_T size) throw();
+ bool Free() throw();
+ LPVOID Lock() const { return GlobalLock(_global); }
+ void Unlock() const { GlobalUnlock(_global); }
+ bool ReAlloc(SIZE_T size) throw();
+};
+
+class CGlobalLock
+{
+ HGLOBAL _global;
+ LPVOID _ptr;
+public:
+ LPVOID GetPointer() const { return _ptr; }
+ CGlobalLock(HGLOBAL hGlobal): _global(hGlobal)
+ {
+ _ptr = GlobalLock(hGlobal);
+ };
+ ~CGlobalLock()
+ {
+ if (_ptr != NULL)
+ GlobalUnlock(_global);
+ }
+};
+
+}}
+
+#endif