00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026 #ifndef OW32_XHLOCAL_H
00027 #define OW32_XHLOCAL_H
00028
00029 #include <OW32/OW32Libs.h>
00030 #include <OW32/windows.h>
00031
00032 namespace OW32
00033 {
00034
00036 class OW32_LIB_EXPORT XHLOCAL
00037 {
00038 private:
00039 HLOCAL m_hLocal;
00040 bool m_bLocked;
00041
00042 XHLOCAL(const XHLOCAL& );
00043 XHLOCAL& operator=(const XHLOCAL& );
00044
00045 public:
00047 XHLOCAL() : m_hLocal(NULL), m_bLocked(false) {}
00048
00050 XHLOCAL(HLOCAL h) : m_hLocal(h), m_bLocked(false) { }
00051
00053 ~XHLOCAL() {
00054 Close();
00055 }
00056
00058 void Close() {
00059 if (m_hLocal != NULL) {
00060 Unlock();
00061 LocalFree(m_hLocal);
00062 m_hLocal = NULL;
00063 }
00064 }
00065
00067 operator HLOCAL() const { return m_hLocal; }
00068
00070 HLOCAL* operator&() { return &m_hLocal; }
00071
00075 LPVOID Lock() {
00076 LPVOID Block = LocalLock(m_hLocal);
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 = LocalUnlock(m_hLocal);
00089 m_bLocked = false;
00090 }
00091 return ret;
00092 }
00093
00095 HLOCAL operator=(HLOCAL h) { Close(); m_hLocal = h; return m_hLocal; }
00096
00098 HLOCAL Detach() { HLOCAL h = m_hLocal; m_hLocal = NULL; return h; }
00099 };
00100
00101 };
00102
00103 #endif // OW32_XHLOCAL_H