Win32Handle.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:2k
源码类别:

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : Win32Handle.cpp
  3. Purpose: Implementation for the CW32Handle class
  4. Created: PJN / 08-01-2002
  5. Copyright (c) 2002 - 2005 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com)
  6. All rights reserved.
  7. Copyright / Usage Details:
  8. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  9. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  10. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  11. code with your application, then you are only allowed to distribute versions released by the author. This is 
  12. to maintain a single distribution point for the source code. 
  13. */
  14. //////////////// Includes ////////////////////////////////////////////
  15. #include "stdafx.h"
  16. #include "Win32Handle.h"
  17. //////////////// Macros //////////////////////////////////////////////
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. //////////////// Implementation //////////////////////////////////////
  24. CW32Handle::CW32Handle()
  25. {
  26.   //Initialize our member variable to sane defaults
  27.   m_hHandle = NULL;
  28. }
  29. CW32Handle::CW32Handle(HANDLE hHandle)
  30. {
  31.   m_hHandle = hHandle;
  32. }
  33. CW32Handle::CW32Handle(CW32Handle& handle)
  34. {
  35.   Attach(handle.Detach());
  36. }
  37. CW32Handle::~CW32Handle()
  38. {
  39.   Close();
  40. }
  41. void CW32Handle::Close()
  42. {
  43.   if (m_hHandle)
  44.   {
  45.     CloseHandle(m_hHandle);
  46.     m_hHandle = NULL;
  47.   }
  48. }
  49. CW32Handle::operator HANDLE() const
  50. {
  51.   return m_hHandle;
  52. }
  53. HANDLE* CW32Handle::operator&()
  54. {
  55. //The assert on operator& usually indicates a bug.  If this is really
  56. //what is needed, however, take the address of the "m_hHandle" member explicitly.
  57.   ASSERT(m_hHandle == NULL);
  58.   return &m_hHandle;
  59. }
  60. void CW32Handle::Attach(HANDLE hHandle)
  61. {
  62.   Close();
  63.   m_hHandle = hHandle;
  64. }
  65. CW32Handle& CW32Handle::operator=(const CW32Handle& Handle)
  66. {
  67.   Close();
  68.   m_hHandle = Handle;
  69.   return *this;
  70. }
  71. HANDLE CW32Handle::Detach()
  72. {
  73.   HANDLE hTemp = m_hHandle;
  74.   m_hHandle = NULL;
  75.   return hTemp;
  76. }