00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026 #ifndef OW32_XHGLOBAL_H
00027 #define OW32_XHGLOBAL_H
00028
00029 #include <OW32/OW32Libs.h>
00030 #include <OW32/windows.h>
00031
00032 namespace OW32
00033 {
00034
00036 class OW32_LIB_EXPORT XHGLOBAL
00037 {
00038 private:
00039 HGLOBAL m_hGlobal;
00040 bool m_bLocked;
00041
00042 XHGLOBAL(const XHGLOBAL& );
00043 XHGLOBAL& operator=(const XHGLOBAL& );
00044
00045 public:
00047 XHGLOBAL() : m_hGlobal(NULL), m_bLocked(false) {}
00048
00050 XHGLOBAL(HGLOBAL h) : m_hGlobal(h), m_bLocked(false) { }
00051
00053 ~XHGLOBAL() {
00054 Close();
00055 }
00056
00058 void Close() {
00059 if (m_hGlobal != NULL) {
00060 Unlock();
00061 GlobalFree(m_hGlobal);
00062 m_hGlobal = NULL;
00063 }
00064 }
00065
00067 operator HGLOBAL() const { return m_hGlobal; }
00068
00070 HGLOBAL* operator&() { return &m_hGlobal; }
00071
00075 LPVOID Lock() {
00076 LPVOID Block = GlobalLock(m_hGlobal);
00077 if (!Block) return NULL;
00078 m_bLocked = true;
00079 return Block;
00080 }
00081
00085 BOOL Unlock() {
00086 BOOL ret = TRUE;
00087 if (m_bLocked) {
00088 ret = GlobalUnlock(m_hGlobal);
00089 m_bLocked = false;
00090 }
00091 return ret;
00092 }
00093
00095 HGLOBAL operator=(HGLOBAL h) { Close(); m_hGlobal = h; return m_hGlobal; }
00096
00098 HGLOBAL Detach() { HGLOBAL h = m_hGlobal; m_hGlobal = NULL; return h; }
00099 };
00100
00101 }
00102
00103 #endif // OW32_XHGLOBAL_H