Source code of Windows XP (NT5)
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.

201 lines
4.2 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // Dummy.cpp
  7. //
  8. // Description:
  9. // Object Manager implementation.
  10. //
  11. // Documentation:
  12. // Yes.
  13. //
  14. // Maintained By:
  15. // Geoffrey Pease (GPease) 22-NOV-1999
  16. //
  17. //////////////////////////////////////////////////////////////////////////////
  18. #include "pch.h"
  19. #include "Dummy.h"
  20. DEFINE_THISCLASS("CDummy")
  21. // ************************************************************************
  22. //
  23. // Constructor / Destructor
  24. //
  25. // ************************************************************************
  26. //////////////////////////////////////////////////////////////////////////////
  27. //
  28. // HRESULT
  29. // CDummy::S_HrCreateInstance(
  30. // IUnknown ** ppunkOut
  31. // )
  32. //
  33. //////////////////////////////////////////////////////////////////////////////
  34. HRESULT
  35. CDummy::S_HrCreateInstance(
  36. IUnknown ** ppunkOut
  37. )
  38. {
  39. TraceFunc( "" );
  40. Assert( ppunkOut != NULL );
  41. CDummy * pdummy = new CDummy;
  42. if ( pdummy != NULL )
  43. {
  44. hr = THR( pdummy->Init( ) );
  45. if ( SUCCEEDED( hr ) )
  46. {
  47. hr = THR( pdummy->TypeSafeQI( IUnknown, ppunkOut ) );
  48. }
  49. pdummy->Release( );
  50. }
  51. else
  52. {
  53. hr = E_OUTOFMEMORY;
  54. }
  55. HRETURN( hr );
  56. } // S_HrCreateInstance( )
  57. //////////////////////////////////////////////////////////////////////////////
  58. //
  59. // CDummy::CDummy( void )
  60. //
  61. //////////////////////////////////////////////////////////////////////////////
  62. CDummy::CDummy( void )
  63. {
  64. TraceFunc( "" );
  65. InterlockedIncrement( &g_cObjects );
  66. TraceFuncExit();
  67. } // CDummy( )
  68. //////////////////////////////////////////////////////////////////////////////
  69. //
  70. // STDMETHODIMP
  71. // CDummy::Init( void )
  72. //
  73. //////////////////////////////////////////////////////////////////////////////
  74. STDMETHODIMP
  75. CDummy::Init( void )
  76. {
  77. TraceFunc( "" );
  78. HRESULT hr = S_OK;
  79. // IUnknown stuff
  80. Assert( m_cRef == 0 );
  81. AddRef( ); // Add one count
  82. HRETURN( hr );
  83. } // Init( )
  84. //////////////////////////////////////////////////////////////////////////////
  85. //
  86. // CDummy::~CDummy( )
  87. //
  88. //////////////////////////////////////////////////////////////////////////////
  89. CDummy::~CDummy( )
  90. {
  91. TraceFunc( "" );
  92. InterlockedDecrement( &g_cObjects );
  93. TraceFuncExit();
  94. } // ~CDummy( )
  95. // ************************************************************************
  96. //
  97. // IUnknown
  98. //
  99. // ************************************************************************
  100. //////////////////////////////////////////////////////////////////////////////
  101. //
  102. // STDMETHODIMP
  103. // CDummy::QueryInterface(
  104. // REFIID riid,
  105. // LPVOID *ppv
  106. // )
  107. //
  108. //////////////////////////////////////////////////////////////////////////////
  109. STDMETHODIMP
  110. CDummy::QueryInterface(
  111. REFIID riid,
  112. LPVOID *ppv
  113. )
  114. {
  115. TraceQIFunc( riid, ppv );
  116. HRESULT hr = E_NOINTERFACE;
  117. if ( IsEqualIID( riid, IID_IUnknown ) )
  118. {
  119. *ppv = static_cast< IDummy * >( this );
  120. hr = S_OK;
  121. } // if: IUnknown
  122. else if ( IsEqualIID( riid, IID_IDummy ) )
  123. {
  124. *ppv = TraceInterface( __THISCLASS__, IDummy, this, 0 );
  125. hr = S_OK;
  126. } // else if: IDummy
  127. if ( SUCCEEDED( hr ) )
  128. {
  129. ((IUnknown*) *ppv)->AddRef( );
  130. } // if: success
  131. QIRETURN( hr, riid );
  132. } // QueryInterface( )
  133. //////////////////////////////////////////////////////////////////////////////
  134. //
  135. // STDMETHODIMP_(ULONG)
  136. // CDummy::AddRef( void )
  137. //
  138. //////////////////////////////////////////////////////////////////////////////
  139. STDMETHODIMP_(ULONG)
  140. CDummy::AddRef( void )
  141. {
  142. TraceFunc( "[IUnknown]" );
  143. InterlockedIncrement( &m_cRef );
  144. RETURN( m_cRef );
  145. } // AddRef( )
  146. //////////////////////////////////////////////////////////////////////////////
  147. //
  148. // STDMETHODIMP_(ULONG)
  149. // CDummy::Release( void )
  150. //
  151. //////////////////////////////////////////////////////////////////////////////
  152. STDMETHODIMP_(ULONG)
  153. CDummy::Release( void )
  154. {
  155. TraceFunc( "[IUnknown]" );
  156. InterlockedDecrement( &m_cRef );
  157. if ( m_cRef )
  158. RETURN( m_cRef );
  159. TraceDo( delete this );
  160. RETURN(0);
  161. } // Release( )