STDFACT.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4.     StdFact.cpp
  5. Abstract:
  6.     Standard IClassFactory implementation
  7. Author:
  8. Environment:
  9.     User mode
  10. Revision History :
  11. --*/
  12. #include "adssmp.h"
  13. STDMETHODIMP
  14. StdClassFactory::QueryInterface(REFIID riid, LPVOID FAR* ppv)
  15. {
  16.     if (!ppv)
  17.         RRETURN(E_INVALIDARG);
  18.     if (IsEqualIID(riid, IID_IUnknown) ||
  19.         IsEqualIID(riid, IID_IClassFactory))
  20.     {
  21.         *ppv = (IClassFactory *) this;
  22.     }
  23.     else
  24.     {
  25.         *ppv = NULL;
  26.         return E_NOINTERFACE;
  27.     }
  28.     ((IUnknown *)*ppv)->AddRef();
  29.     return S_OK;
  30. }
  31. STDMETHODIMP_(ULONG)
  32. StdClassFactory::AddRef(void)
  33. {
  34.     ADsAssert(_ulRefs);
  35.     if (_ulRefs == 1)
  36.         INC_OBJECT_COUNT();
  37.     return ++_ulRefs;
  38. }
  39. STDMETHODIMP_(ULONG)
  40. StdClassFactory::Release(void)
  41. {
  42.     ADsAssert(_ulRefs > 1);
  43.     if (--_ulRefs == 1)
  44.         DEC_OBJECT_COUNT();
  45.     return _ulRefs;
  46. }
  47. STDMETHODIMP
  48. StdClassFactory::LockServer (BOOL fLock)
  49. {
  50.     if (fLock)
  51.         INC_OBJECT_COUNT();
  52.     else
  53.         DEC_OBJECT_COUNT();
  54.     return NOERROR;
  55. }
  56. CDynamicCF::CDynamicCF(void)
  57. {
  58.     _ulRefs = 1;
  59.     INC_OBJECT_COUNT();
  60. }
  61. CDynamicCF::~CDynamicCF(void)
  62. {
  63.     DEC_OBJECT_COUNT();
  64. }
  65. STDMETHODIMP
  66. CDynamicCF::QueryInterface(REFIID riid, LPVOID FAR* ppv)
  67. {
  68.     if (!ppv)
  69.         RRETURN(E_INVALIDARG);
  70.     if (IsEqualIID(riid, IID_IUnknown) ||
  71.         IsEqualIID(riid, IID_IClassFactory))
  72.     {
  73.         *ppv = (IClassFactory *) this;
  74.     }
  75.     else
  76.     {
  77.         *ppv = NULL;
  78.         return E_NOINTERFACE;
  79.     }
  80.     ((IUnknown *)*ppv)->AddRef();
  81.     return S_OK;
  82. }
  83. STDMETHODIMP
  84. CDynamicCF::LockServer (BOOL fLock)
  85. {
  86.     if (fLock)
  87.     {
  88.         _ulRefs++;
  89.     }
  90.     else
  91.     {
  92.         _ulRefs--;
  93.     }
  94.     return S_OK;
  95. }
  96. #ifdef DOCGEN
  97. STDMETHODIMP
  98. StdClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
  99.         REFIID iid,
  100.         LPVOID FAR* ppv) {};
  101. #endif  // DOCGEN