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