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

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