Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.8 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  4. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  5. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  6. // PARTICULAR PURPOSE.
  7. //
  8. // Copyright 1998 - 2001 Microsoft Corporation. All Rights Reserved.
  9. //
  10. // File: minici.hxx
  11. //
  12. // PURPOSE: Helper classes for sample programs
  13. //
  14. // PLATFORM: Windows 2000 and later
  15. //
  16. //--------------------------------------------------------------------------
  17. #pragma once
  18. #include <eh.h>
  19. #include <limits.h>
  20. inline void * __cdecl operator new( size_t st )
  21. {
  22. return (void *) LocalAlloc( LMEM_FIXED, st );
  23. } //new
  24. inline void __cdecl operator delete( void *pv )
  25. {
  26. if ( 0 != pv )
  27. LocalFree( (HLOCAL) pv );
  28. } //delete
  29. //+-------------------------------------------------------------------------
  30. //
  31. // Template: XPtr
  32. //
  33. // Synopsis: Template for managing ownership of memory
  34. //
  35. //--------------------------------------------------------------------------
  36. template<class T> class XPtr
  37. {
  38. public:
  39. XPtr( unsigned c = 0 ) : _p(0) { if ( 0 != c ) _p = new T [ c ]; }
  40. XPtr( T * p ) : _p( p ) {}
  41. ~XPtr() { Free(); }
  42. void SetSize( unsigned c ) { Free(); _p = new T [ c ]; }
  43. void Set ( T * p ) { _p = p; }
  44. T * Get() const { return _p ; }
  45. void Free() { delete [] Acquire(); }
  46. T & operator[]( unsigned i ) { return _p[i]; }
  47. T const & operator[]( unsigned i ) const { return _p[i]; }
  48. T * Acquire() { T * p = _p; _p = 0; return p; }
  49. BOOL IsNull() const { return ( 0 == _p ); }
  50. private:
  51. T * _p;
  52. };
  53. //+-------------------------------------------------------------------------
  54. //
  55. // Template: XInterface
  56. //
  57. // Synopsis: Template for managing ownership of interfaces
  58. //
  59. //--------------------------------------------------------------------------
  60. template<class T> class XInterface
  61. {
  62. public:
  63. XInterface( T * p = 0 ) : _p( p ) {}
  64. ~XInterface() { if ( 0 != _p ) _p->Release(); }
  65. T * operator->() { return _p; }
  66. T * GetPointer() const { return _p; }
  67. IUnknown ** GetIUPointer() { return (IUnknown **) &_p; }
  68. T ** GetPPointer() { return &_p; }
  69. void ** GetQIPointer() { return (void **) &_p; }
  70. T * Acquire() { T * p = _p; _p = 0; return p; }
  71. BOOL IsNull() { return ( 0 == _p ); }
  72. void Free() { T * p = Acquire(); if ( 0 != p ) p->Release(); }
  73. void Set( T * p ) { _p = p; }
  74. T & GetReference() { return *_p; }
  75. private:
  76. T * _p;
  77. };
  78. //+-------------------------------------------------------------------------
  79. //
  80. // Class: XBStr
  81. //
  82. // Synopsis: Class for managing ownership of BSTRings
  83. //
  84. //--------------------------------------------------------------------------
  85. class XBStr
  86. {
  87. public:
  88. XBStr( BSTR p = 0 ) : _p( p ) {}
  89. XBStr( XBStr & x ): _p( x.Acquire() ) {}
  90. ~XBStr() { Free(); }
  91. BOOL IsNull() const { return (0 == _p); }
  92. BSTR SetText( WCHAR const * pStr )
  93. {
  94. _p = SysAllocString( pStr );
  95. return _p;
  96. }
  97. void Set( BSTR pOleStr ) { _p = pOleStr; }
  98. BSTR Acquire() { BSTR p = _p; _p = 0; return p; }
  99. BSTR GetPointer() const { return _p; }
  100. void Free() { SysFreeString(Acquire()); }
  101. private:
  102. BSTR _p;
  103. };
  104. class XWindow
  105. {
  106. public:
  107. XWindow( HWND h = 0 ) : _h( h ) {}
  108. ~XWindow() { Free(); }
  109. void Free() { if ( 0 != _h ) { DestroyWindow( _h ); _h = 0; } }
  110. void Set( HWND h ) { _h = 0; }
  111. HWND Get() { return _h; }
  112. private:
  113. HWND _h;
  114. };
  115. inline ULONG CiPtrToUlong( ULONG_PTR p )
  116. {
  117. return PtrToUlong( (PVOID)p );
  118. }
  119. #define CiPtrToUint( p ) CiPtrToUlong( p )
  120. #define ArraySize( x ) ( sizeof( x ) / sizeof( x[0] ) )