home *** CD-ROM | disk | FTP | other *** search
/ ActiveX Programming Unleashed CD / AXU.iso / source / chap03 / lst31 / lstr.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-23  |  2.1 KB  |  161 lines

  1.  
  2. #include "lstr.h"
  3.  
  4. extern long g_cLock;
  5.  
  6. STDMETHODIMP CLowerStr::QueryInterface(REFIID iid, void **ppv)
  7. {
  8.     HRESULT hr;
  9.  
  10.     *ppv = NULL;
  11.  
  12.     if((iid == IID_IUnknown) || (iid == IID_ILowerStr) )
  13.     {
  14.         *ppv = (ILowerStr *)this;
  15.         AddRef();
  16.         hr = S_OK;
  17.     }
  18.     else
  19.     {
  20.         *ppv = NULL;
  21.         hr = E_NOINTERFACE;
  22.     }
  23.  
  24.     return hr;
  25.         
  26. }
  27.  
  28. STDMETHODIMP_(ULONG) CLowerStr::AddRef()
  29. {
  30.     m_dwRef++;
  31.     return m_dwRef;
  32. }
  33.  
  34. STDMETHODIMP_(ULONG) CLowerStr::Release()
  35. {
  36.     m_dwRef--;
  37.     if(m_dwRef == 0)
  38.         delete this;
  39.     return m_dwRef;
  40. }
  41.  
  42.  
  43. STDMETHODIMP  CLowerStr::Lower(char *lpInput, char **pOutput)
  44. {
  45.     int i; 
  46.  
  47.     *pOutput = new char[strlen(lpInput) + 1];
  48.  
  49.     for (i=0; i< strlen(lpInput); i++)
  50.     {
  51.         if(isupper(*(lpInput+i)))
  52.             *(*pOutput+i) = _tolower(*(lpInput + i));
  53.         else
  54.             *(*pOutput+i) = *(lpInput + i);
  55.     }
  56.  
  57.     *(*pOutput+i) = '\0';
  58.  
  59.     return S_OK;
  60.  
  61. }
  62.  
  63.  
  64.  
  65. CLowerStr::CLowerStr()
  66. {
  67.     m_dwRef = 1;
  68. }
  69.  
  70. CLowerStr::~CLowerStr()
  71. {
  72. }
  73.  
  74.  
  75. CLowerStrClassFactory::CLowerStrClassFactory()
  76. {
  77.    m_dwRef=1;
  78. }
  79.  
  80. CLowerStrClassFactory::~CLowerStrClassFactory()
  81. {
  82. }
  83.  
  84.  
  85. STDMETHODIMP CLowerStrClassFactory::QueryInterface (REFIID iid,void **ppv)
  86. {
  87.   HRESULT hr;
  88.   *ppv = NULL;
  89.  
  90.   if (IID_IUnknown== iid || IID_IClassFactory== iid)
  91.   {
  92.       *ppv=this;
  93.       AddRef();
  94.       hr = S_OK;
  95.   }
  96.   else
  97.   {
  98.       *ppv = NULL;
  99.       hr = E_NOINTERFACE;
  100.   }
  101.  
  102.   return hr;
  103. }
  104.  
  105.  
  106. STDMETHODIMP_(ULONG) CLowerStrClassFactory::AddRef(void)
  107. {
  108.    return m_dwRef++;
  109.  
  110. //Release
  111. STDMETHODIMP_(ULONG) CLowerStrClassFactory::Release(void)
  112. {
  113.     m_dwRef--;
  114.  
  115.     if(m_dwRef == 0)
  116.         delete this;
  117.  
  118.     return m_dwRef;
  119.  
  120.  
  121. STDMETHODIMP CLowerStrClassFactory::CreateInstance (IUnknown *pUnkOuter,REFIID iid,void **ppv)
  122. {
  123.    HRESULT hr;
  124.    CLowerStr *pObj;
  125.  
  126.    *ppv = NULL;
  127.  
  128.    pObj = new CLowerStr;
  129.    
  130.    if (pObj)
  131.    {
  132.         hr=pObj->QueryInterface(iid,ppv);
  133.         pObj->Release();
  134.    }
  135.    else
  136.    {
  137.        hr = E_OUTOFMEMORY;
  138.         *ppv = NULL;
  139.    }
  140.  
  141.    return hr;
  142. }
  143.  
  144. STDMETHODIMP CLowerStrClassFactory::LockServer(BOOL fLock)
  145. {
  146.    if (fLock)
  147.       g_cLock++;
  148.    else 
  149.       g_cLock--;
  150.  
  151.    return S_OK;
  152. }
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.