home *** CD-ROM | disk | FTP | other *** search
/ ActiveX Programming Unleashed CD / AXU.iso / source / chap03 / lst311 / lstr.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-23  |  2.3 KB  |  172 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 if(iid == IID_IHelpLowerStr)
  19.     {
  20.         *ppv = (IHelpLowerStr *) this;
  21.         AddRef();
  22.         hr = S_OK;
  23.     }
  24.     else
  25.     {
  26.         *ppv = NULL;
  27.         hr = E_NOINTERFACE;
  28.     }
  29.  
  30.     return hr;
  31.         
  32. }
  33.  
  34. STDMETHODIMP_(ULONG) CLowerStr::AddRef()
  35. {
  36.     m_dwRef++;
  37.     return m_dwRef;
  38. }
  39.  
  40. STDMETHODIMP_(ULONG) CLowerStr::Release()
  41. {
  42.     m_dwRef--;
  43.     if(m_dwRef == 0)
  44.         delete this;
  45.     return m_dwRef;
  46. }
  47.  
  48.  
  49. STDMETHODIMP  CLowerStr::Lower(char *lpInput, char **pOutput)
  50. {
  51.     int i; 
  52.  
  53.     *pOutput = new char[strlen(lpInput) + 1];
  54.  
  55.     for (i=0; i< strlen(lpInput); i++)
  56.     {
  57.         if(isupper(*(lpInput+i)))
  58.             *(*pOutput+i) = _tolower(*(lpInput + i));
  59.         else
  60.             *(*pOutput+i) = *(lpInput + i);
  61.     }
  62.  
  63.     *(*pOutput+i) = '\0';
  64.  
  65.     return S_OK;
  66.  
  67. }
  68.  
  69. STDMETHODIMP CLowerStr::HelpLower()
  70. {
  71.     return S_OK;
  72. }
  73.  
  74.  
  75.  
  76. CLowerStr::CLowerStr()
  77. {
  78.     m_dwRef = 1;
  79. }
  80.  
  81. CLowerStr::~CLowerStr()
  82. {
  83. }
  84.  
  85.  
  86. CLowerStrClassFactory::CLowerStrClassFactory()
  87. {
  88.    m_dwRef=1;
  89. }
  90.  
  91. CLowerStrClassFactory::~CLowerStrClassFactory()
  92. {
  93. }
  94.  
  95.  
  96. STDMETHODIMP CLowerStrClassFactory::QueryInterface (REFIID iid,void **ppv)
  97. {
  98.   HRESULT hr;
  99.   *ppv = NULL;
  100.  
  101.   if (IID_IUnknown== iid || IID_IClassFactory== iid)
  102.   {
  103.       *ppv=this;
  104.       AddRef();
  105.       hr = S_OK;
  106.   }
  107.   else
  108.   {
  109.       *ppv = NULL;
  110.       hr = E_NOINTERFACE;
  111.   }
  112.  
  113.   return hr;
  114. }
  115.  
  116.  
  117. STDMETHODIMP_(ULONG) CLowerStrClassFactory::AddRef(void)
  118. {
  119.    return m_dwRef++;
  120.  
  121. //Release
  122. STDMETHODIMP_(ULONG) CLowerStrClassFactory::Release(void)
  123. {
  124.     m_dwRef--;
  125.  
  126.     if(m_dwRef == 0)
  127.         delete this;
  128.  
  129.     return m_dwRef;
  130.  
  131.  
  132. STDMETHODIMP CLowerStrClassFactory::CreateInstance (IUnknown *pUnkOuter,REFIID iid,void **ppv)
  133. {
  134.    HRESULT hr;
  135.    CLowerStr *pObj;
  136.  
  137.    *ppv = NULL;
  138.  
  139.    pObj = new CLowerStr;
  140.    
  141.    if (pObj)
  142.    {
  143.         hr=pObj->QueryInterface(iid,ppv);
  144.         pObj->Release();
  145.    }
  146.    else
  147.    {
  148.        hr = E_OUTOFMEMORY;
  149.         *ppv = NULL;
  150.    }
  151.  
  152.    return hr;
  153. }
  154.  
  155. STDMETHODIMP CLowerStrClassFactory::LockServer(BOOL fLock)
  156. {
  157.    if (fLock)
  158.       g_cLock++;
  159.    else 
  160.       g_cLock--;
  161.  
  162.    return S_OK;
  163. }
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.