home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / common / msdev98 / template / atl / object.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-16  |  4.5 KB  |  188 lines

  1. [!if=(FreeThreadedMarshaler, "TRUE")]
  2.     [!set(NeedsGetControllingUnknown, "TRUE")]
  3. [!endif]
  4. // [!HeaderName] : Declaration of the [!ClassName]
  5. [!crlf]
  6.  
  7. [!if=(FileExists, "FALSE")]
  8. #ifndef __[!UpperShortName]_H_
  9. #define __[!UpperShortName]_H_
  10. [!crlf]
  11. #include "resource.h"       // main symbols
  12. [!else]
  13. [!AddIncludeFile(TargetFile, "resource.h")]
  14. [!endif]
  15.  
  16. [!crlf]
  17. /////////////////////////////////////////////////////////////////////////////
  18. // [!ClassName]
  19.  
  20. class ATL_NO_VTABLE [!ClassName] : 
  21. [!if=(ThreadingModel, "Single")]
  22.     public CComObjectRootEx<CComSingleThreadModel>,
  23. [!endif]
  24. [!if=(ThreadingModel, "Apartment")]
  25.     public CComObjectRootEx<CComSingleThreadModel>,
  26. [!endif]
  27. [!if=(ThreadingModel, "Both")]
  28.     public CComObjectRootEx<CComMultiThreadModel>,
  29. [!endif]
  30. [!if=(ThreadingModel, "Free")]
  31.     public CComObjectRootEx<CComMultiThreadModel>,
  32. [!endif]
  33.     public CComCoClass<[!ClassName], &CLSID_[!CoClassName]>,
  34. [!if=(IOBJECTWITHSITE, "TRUE")]
  35.     public IObjectWithSiteImpl<[!ClassName]>,
  36. [!endif]
  37. [!if=(ISERVICEPROVIDER, "TRUE")]
  38.     public IServiceProviderImpl<[!ClassName]>,
  39. [!endif]
  40.  
  41. [!if=(ErrorInfoEnabled, "TRUE")]
  42.     public ISupportErrorInfo,
  43. [!endif]
  44. [!if=(ConnectionPointsEnabled, "TRUE")]
  45.     public IConnectionPointContainerImpl<[!ClassName]>,
  46. [!endif]
  47.  
  48. [!if=(IPERSISTSTORAGE, "TRUE")]
  49.     public IPersistStorageImpl<[!ClassName]>,
  50. [!endif]
  51. [!if=(ISPECIFYPROPERTYPAGES, "TRUE")]
  52.     public ISpecifyPropertyPagesImpl<[!ClassName]>,
  53. [!endif]
  54. [!if=(IDATAOBJECT, "TRUE")]
  55.     public IDataObjectImpl<[!ClassName]>,
  56. [!endif]
  57. [!if=(ConnectionPointsEnabled, "TRUE")]
  58. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  59.     public IProvideClassInfo2Impl<&CLSID_[!CoClassName], &DIID__[!InterfaceName]Events, &LIBID_[!LibName]>,
  60. [!endif]
  61. [!if=(IPROPERTYNOTIFYSINK, "TRUE")]
  62.     public IPropertyNotifySinkCP<[!ClassName]>,
  63. [!endif]
  64. [!else]
  65. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  66.     public IProvideClassInfo2Impl<&CLSID_[!CoClassName], [!ConnectionPointInterface], &LIBID_[!LibName]>,
  67. [!endif]
  68. [!endif]
  69. [!if=(Dual, "TRUE")]
  70.     public IDispatchImpl<[!InterfaceName], &IID_[!InterfaceName], &LIBID_[!LibName]>
  71. [!else]
  72.     public [!InterfaceName]
  73. [!endif]
  74. {
  75. public:
  76.     [!ClassName]()
  77.     {
  78. [!if=(FreeThreadedMarshaler, "TRUE")]
  79.         m_pUnkMarshaler = NULL;
  80. [!endif]
  81.     }
  82.  
  83. [!crlf]
  84. DECLARE_REGISTRY_RESOURCEID([!IDR_REGISTRYID])
  85.  
  86. [!if=(Aggregatable, "NO")]
  87. DECLARE_NOT_AGGREGATABLE([!ClassName])
  88. [!endif]
  89. [!if=(Aggregatable, "ONLY")]
  90. DECLARE_ONLY_AGGREGATABLE([!ClassName])
  91. [!endif]
  92.  
  93. [!if=(NeedsGetControllingUnknown, "TRUE")]
  94. DECLARE_GET_CONTROLLING_UNKNOWN()
  95. [!endif]
  96. [!crlf]
  97. DECLARE_PROTECT_FINAL_CONSTRUCT()
  98.  
  99. [!crlf]
  100. BEGIN_COM_MAP([!ClassName])
  101.     COM_INTERFACE_ENTRY([!InterfaceName])
  102. [!if=(Dual, "TRUE")]
  103.     COM_INTERFACE_ENTRY(IDispatch)
  104. [!endif]
  105. [!if=(ErrorInfoEnabled, "TRUE")]
  106.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  107. [!endif]
  108. [!if=(ConnectionPointsEnabled, "TRUE")]
  109.     COM_INTERFACE_ENTRY(IConnectionPointContainer)
  110. [!endif]
  111. [!if=(FreeThreadedMarshaler, "TRUE")]
  112.     COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  113. [!endif]
  114. [!if=(ISPECIFYPROPERTYPAGES, "TRUE")]
  115.     COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
  116. [!endif]
  117. [!if=(IPERSISTSTORAGE, "TRUE")]
  118.     COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
  119. [!endif]
  120. [!if=(IDATAOBJECT, "TRUE")]
  121.     COM_INTERFACE_ENTRY_IMPL(IDataObject)
  122. [!endif]
  123. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  124.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  125.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  126. [!endif]
  127.  
  128. [!if=(IOBJECTWITHSITE, "TRUE")]
  129.     COM_INTERFACE_ENTRY(IObjectWithSite)
  130. [!endif]
  131. [!if=(ISERVICEPROVIDER, "TRUE")]
  132.     COM_INTERFACE_ENTRY(IServiceProvider)
  133. [!endif]
  134.  
  135. END_COM_MAP()
  136.  
  137. [!if=(ConnectionPointsEnabled, "TRUE")]
  138. BEGIN_CONNECTION_POINT_MAP([!ClassName])
  139. [!if=(IPROPERTYNOTIFYSINK, "TRUE")]
  140.     CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
  141. [!endif]
  142. END_CONNECTION_POINT_MAP()
  143. [!crlf]
  144. [!endif]
  145.  
  146. [!if=(FreeThreadedMarshaler, "TRUE")]
  147. [!crlf]
  148.     HRESULT FinalConstruct()
  149.     {
  150.         return CoCreateFreeThreadedMarshaler(
  151.             GetControllingUnknown(), &m_pUnkMarshaler.p);
  152.     }
  153.  
  154. [!crlf]
  155.     void FinalRelease()
  156.     {
  157.         m_pUnkMarshaler.Release();
  158.     }
  159.  
  160. [!crlf]
  161.     CComPtr<IUnknown> m_pUnkMarshaler;
  162. [!endif]
  163.  
  164. [!if=(ErrorInfoEnabled, "TRUE")]
  165. [!crlf]
  166. // ISupportsErrorInfo
  167.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  168. [!endif]
  169.  
  170. [!crlf]
  171. [!if=(ISERVICEPROVIDER, "TRUE")]
  172.     STDMETHOD(_InternalQueryService)(REFGUID guidService, REFIID riid, void** ppvObject)
  173.     {
  174.         return E_NOTIMPL;
  175.     }
  176. [!crlf]
  177. [!endif]
  178.  
  179. // [!InterfaceName]
  180. public:
  181.  
  182. };
  183.  
  184. [!crlf]
  185. [!if=(FileExists, "FALSE")]
  186. #endif //__[!UpperShortName]_H_
  187. [!endif]
  188.