1// Windows/Handle.h 2 3#ifndef ZIP7_INC_WINDOWS_HANDLE_H 4#define ZIP7_INC_WINDOWS_HANDLE_H 5 6#include "../Common/MyWindows.h" 7 8namespace NWindows { 9 10class CHandle MY_UNCOPYABLE 11{ 12protected: 13 HANDLE _handle; 14public: 15 operator HANDLE() { return _handle; } 16 CHandle(): _handle(NULL) {} 17 ~CHandle() { Close(); } 18 bool IsCreated() const { return (_handle != NULL); } 19 bool Close() 20 { 21 if (_handle == NULL) 22 return true; 23 if (!::CloseHandle(_handle)) 24 return false; 25 _handle = NULL; 26 return true; 27 } 28 void Attach(HANDLE handle) { _handle = handle; } 29 HANDLE Detach() 30 { 31 const HANDLE handle = _handle; 32 _handle = NULL; 33 return handle; 34 } 35}; 36 37} 38 39#endif 40