home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / atl / commap / outer.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  3KB  |  112 lines

  1. // Outer.cpp : Implementation of CCOMMapApp and DLL registration.
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12.  
  13. #include "premap.h"
  14. #include "COMMap.h"
  15. #include "Outer.h"
  16.  
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. //
  20.  
  21. STDMETHODIMP COuter::InterfaceSupportsErrorInfo(REFIID riid)
  22. {
  23.     if (CChainBase::InterfaceSupportsErrorInfo(riid) == S_OK)
  24.         return S_OK;
  25.     if (riid == IID_IOuter)
  26.         return S_OK;
  27.     return S_FALSE;
  28. }
  29.  
  30. HRESULT COuter::FinalConstruct()
  31. {
  32.     IUnknown* pUnkOuter = GetControllingUnknown();
  33.  
  34.     HRESULT hRes = CoCreateInstance(CLSID_CAgg, pUnkOuter, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&m_pUnkAgg);
  35.     if (hRes != S_OK)
  36.         return hRes;
  37.  
  38.     hRes = CoCreateInstance(CLSID_CAggBlind, pUnkOuter, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&m_pUnkAggBlind);
  39.     if (hRes != S_OK)
  40.         return hRes;
  41.  
  42.     return S_OK;
  43. }
  44.  
  45. void COuter::FinalRelease()
  46. {
  47.     m_pUnkTearOff2.Release();
  48.     m_pUnkAgg.Release();
  49.     m_pUnkAggBlind.Release();
  50.     m_pUnkAutoAgg.Release();
  51.     m_pUnkAutoAggB.Release();
  52. }
  53.  
  54. STDMETHODIMP COuter::GetName(short n, BSTR* pbstrName)
  55. {
  56.     switch(n)
  57.     {
  58.     case 0:
  59.             *pbstrName = ::SysAllocString(L"IOuter"); return S_OK;
  60.     case 1:
  61.         {
  62.             CComQIPtr<ITearOff1, &IID_ITearOff1> pITearOff1(GetControllingUnknown());
  63.             if (pITearOff1 != NULL)
  64.                 return pITearOff1->get_Name(pbstrName);
  65.             break;
  66.         }
  67.     case 2:
  68.         {
  69.             CComQIPtr<ITearOff2, &IID_ITearOff2> pITearOff2(GetControllingUnknown());
  70.             if (pITearOff2 != NULL)
  71.                 return pITearOff2->get_Name(pbstrName);
  72.             break;
  73.         }
  74.     case 3:
  75.         {
  76.             CComQIPtr<IChain, &IID_IChain> pIChain(GetControllingUnknown());
  77.             if (pIChain != NULL)
  78.                 return pIChain->get_Name2(pbstrName);
  79.             break;
  80.         }
  81.     case 4:
  82.         {
  83.             CComQIPtr<IAgg, &IID_IAgg> pIAgg(GetControllingUnknown());
  84.             if (pIAgg != NULL)
  85.                 return pIAgg->get_Name(pbstrName);
  86.             break;
  87.         }
  88.     case 5:
  89.         {
  90.             CComQIPtr<IAutoAgg, &IID_IAutoAgg> pIAutoAgg(GetControllingUnknown());
  91.             if (pIAutoAgg != NULL)
  92.                 return pIAutoAgg->get_Name(pbstrName);
  93.             break;
  94.         }
  95.     case 6:
  96.         {
  97.             CComQIPtr<IAggBlind, &IID_IAggBlind> pIAggBlind(GetControllingUnknown());
  98.             if (pIAggBlind != NULL)
  99.                 return pIAggBlind->get_Name(pbstrName);
  100.             break;
  101.         }
  102.     case 7:
  103.         {
  104.             CComQIPtr<IAutoAggB, &IID_IAutoAggB> pIAutoAggB(GetControllingUnknown());
  105.             if (pIAutoAggB != NULL)
  106.                 return pIAutoAggB->get_Name(pbstrName);
  107.             break;
  108.         }
  109.     }
  110.     return Error(_T("Interface type out of range"));
  111. }
  112.