OUTER.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  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. #include "premap.h"
  13. #include "Outer.h"
  14. /////////////////////////////////////////////////////////////////////////////
  15. //
  16. STDMETHODIMP COuter::InterfaceSupportsErrorInfo(REFIID riid)
  17. {
  18.     if (CChainBase::InterfaceSupportsErrorInfo(riid) == S_OK)
  19.         return S_OK;
  20.     if (riid == __uuidof(IOuter))
  21.         return S_OK;
  22.     return S_FALSE;
  23. }
  24. HRESULT COuter::FinalConstruct()
  25. {
  26.     IUnknown* pUnkOuter = GetControllingUnknown();
  27.     HRESULT hRes = CoCreateInstance(__uuidof(CoAgg), pUnkOuter, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void**)&m_pUnkAgg);
  28.     if (hRes != S_OK)
  29.         return hRes;
  30.     hRes = CoCreateInstance(__uuidof(CoAggBlind), pUnkOuter, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void**)&m_pUnkAggBlind);
  31.     if (hRes != S_OK)
  32.         return hRes;
  33.     return S_OK;
  34. }
  35. void COuter::FinalRelease()
  36.     m_pUnkTearOff2.Release();
  37.     m_pUnkAgg.Release();
  38.     m_pUnkAggBlind.Release();
  39.     m_pUnkAutoAgg.Release();
  40.     m_pUnkAutoAggB.Release();
  41. }
  42. STDMETHODIMP COuter::GetName(short n, BSTR* pbstrName)
  43. {
  44.     try {
  45.     switch(n)
  46.     {
  47.     case 0:
  48.             *pbstrName = ::SysAllocString(L"IOuter"); return S_OK;
  49.     case 1:
  50.         {
  51.             ITearOff1Ptr pITearOff1 = GetControllingUnknown();
  52.             return pITearOff1->get_Name(pbstrName);
  53.             break;
  54.         }
  55.     case 2:
  56.         {
  57.             ITearOff2Ptr pITearOff2 = GetControllingUnknown();
  58.             return pITearOff2->get_Name(pbstrName);
  59.             break;
  60.         }
  61.     case 3:
  62.         {
  63.             IChainPtr pIChain = GetControllingUnknown();
  64.             return pIChain->get_Name2(pbstrName);
  65.             break;
  66.         }
  67.     case 4:
  68.         {
  69.             IAggPtr pIAgg = GetControllingUnknown();
  70.             return pIAgg->get_Name(pbstrName);
  71.             break;
  72.         }
  73.     case 5:
  74.         {
  75.             IAutoAggPtr pIAutoAgg = GetControllingUnknown();
  76.             return pIAutoAgg->get_Name(pbstrName);
  77.             break;
  78.         }
  79.     case 6:
  80.         {
  81.             IAggBlindPtr pIAggBlind = GetControllingUnknown();
  82.             return pIAggBlind->get_Name(pbstrName);
  83.             break;
  84.         }
  85.     case 7:
  86.         {
  87.             IAutoAggBPtr pIAutoAggB = GetControllingUnknown();
  88.             return pIAutoAggB->get_Name(pbstrName);
  89.             break;
  90.         }
  91.     }
  92.     return Error(_T("Interface type out of range"));
  93.     } catch(...) {
  94.     return Error(_T("No interface"));
  95.     }
  96. }