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

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