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

Windows编程

开发平台:

Visual C++

  1. // Outer.h : Declaration of the COuter
  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. #ifndef _OUTER_H
  14. #define _OUTER_H
  15. #include "mapres.h"       // main symbols
  16. #include "chain.h"
  17. /////////////////////////////////////////////////////////////////////////////
  18. // COMMap
  19. class COuter;
  20. class CTearOff1:
  21.     public CComDualImpl<ITearOff1, &__uuidof(ITearOff1), &LIBID_COMMAPLib>,
  22.     public CComTearOffObjectBase<COuter>
  23. {
  24. public:
  25.     CTearOff1(){}
  26.     ~CTearOff1(){}
  27.     BEGIN_COM_MAP(CTearOff1)
  28.         COM_INTERFACE_ENTRY(ITearOff1)
  29.     END_COM_MAP()
  30.     HRESULT STDMETHODCALLTYPE get_Name(BSTR* pbstrName)
  31.     {
  32.         *pbstrName = ::SysAllocString(L"ITearOff1");
  33.         return S_OK;
  34.     }
  35. };
  36. class CTearOff2:
  37.     public CComDualImpl<ITearOff2, &__uuidof(ITearOff2), &LIBID_COMMAPLib>,
  38.     public CComTearOffObjectBase<COuter>
  39. {
  40. public:
  41.     CTearOff2(){}
  42.     ~CTearOff2(){}
  43.     BEGIN_COM_MAP(CTearOff2)
  44.         COM_INTERFACE_ENTRY(ITearOff2)
  45.     END_COM_MAP()
  46.     HRESULT STDMETHODCALLTYPE get_Name(BSTR* pbstrName)
  47.     {
  48.         *pbstrName = ::SysAllocString(L"ITearOff2");
  49.         return S_OK;
  50.     }
  51. };
  52. class COuter : 
  53.     public CChainBase,
  54.     public CComDualImpl<IOuter, &__uuidof(IOuter), &LIBID_COMMAPLib>, 
  55.     public CComCoClass<COuter,&__uuidof(CoOuter)>
  56. {
  57. public:
  58.     COuter(){}
  59.     ~COuter(){}
  60.     HRESULT FinalConstruct();
  61.     void FinalRelease();
  62. BEGIN_COM_MAP(COuter)
  63.     COM_INTERFACE_ENTRY2(IDispatch, IOuter)
  64.     COM_INTERFACE_ENTRY(IOuter)
  65.     COM_INTERFACE_ENTRY_TEAR_OFF(__uuidof(ITearOff1), CTearOff1)
  66.     COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(__uuidof(ITearOff2), CTearOff2, m_pUnkTearOff2.p)
  67.     COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_pUnkAgg.p)
  68.     COM_INTERFACE_ENTRY_AGGREGATE_BLIND(m_pUnkAggBlind.p)
  69.     COM_INTERFACE_ENTRY_AUTOAGGREGATE(__uuidof(IAutoAgg), m_pUnkAutoAgg.p, __uuidof(CoAutoAgg))
  70.     COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(m_pUnkAutoAggB.p, __uuidof(CoAutoAggB))
  71.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  72.     COM_INTERFACE_ENTRY_CHAIN(CChainBase)
  73. END_COM_MAP()
  74. //DECLARE_NOT_AGGREGATABLE(COuter) 
  75. // Remove the comment from the line above if you don't want your object to 
  76. // support aggregation.  The default is to support it
  77. DECLARE_REGISTRY_RESOURCEID(IDR_Outer)
  78. DECLARE_GET_CONTROLLING_UNKNOWN()
  79. // ISupportsErrorInfo
  80.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  81.     CComPtr<IUnknown> m_pUnkTearOff2;
  82.     CComPtr<IUnknown> m_pUnkAgg;
  83.     CComPtr<IUnknown> m_pUnkAggBlind;
  84.     CComPtr<IUnknown> m_pUnkAutoAgg;
  85.     CComPtr<IUnknown> m_pUnkAutoAggB;
  86.     CComObjectThreadModel::AutoCriticalSection m_sec;
  87. // IOuter
  88. public:
  89.     STDMETHOD(GetName)(short n, BSTR* pbstrName);
  90. };
  91. #endif // _OUTER_H