home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / ObjRepos / comobject.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-02-01  |  4.2 KB  |  157 lines

  1. [!outputon] // $Revision:   1.12.1.5  $
  2. [!if=(FreeThreadedMarshaler, "TRUE")]
  3.   [!set(NeedsGetControllingUnknown, "TRUE")]
  4. [!endif]
  5. // [!HeaderName] : Declaration of the [!ClassName]
  6.  
  7. #ifndef [!IDEHeaderName]
  8. #define [!IDEHeaderName]
  9.  
  10. #include "[!TypeLibModuleName].H"
  11.  
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // [!ClassName]     Implements [!InterfaceName], default interface of [!CoClassName]
  15. [!if=(ConnectionPointsEnabled, "TRUE")]
  16. //                  and [!InterfaceName]Events, the default source interface
  17. [!endif]
  18. // ThreadingModel : [!ThreadingModel]
  19. // Dual Interface : [!Dual]
  20. // Event Support  : [!ConnectionPointsEnabled]
  21. // Default ProgID : [!ProgID]
  22. // Description    : [!Description]
  23. /////////////////////////////////////////////////////////////////////////////
  24. class ATL_NO_VTABLE [!ClassName] : 
  25. [!if=(ThreadingModel, "Single")]
  26.   public CComObjectRootEx<CComSingleThreadModel>,
  27. [!endif]
  28. [!if=(ThreadingModel, "Apartment")]
  29.   public CComObjectRootEx<CComSingleThreadModel>,
  30. [!endif]
  31. [!if=(ThreadingModel, "Both")]
  32.   public CComObjectRootEx<CComMultiThreadModel>,
  33. [!endif]
  34. [!if=(ThreadingModel, "Free")]
  35.   public CComObjectRootEx<CComMultiThreadModel>,
  36. [!endif]
  37. [!if=(ThreadingModel, "Neutral")]
  38.   public CComObjectRootEx<CComMultiThreadModel>,
  39. [!endif]
  40.   public CComCoClass<[!ClassName], &CLSID_[!CoClassName]>,
  41. [!if=(IObjectWithSite, "TRUE")]
  42.   public IObjectWithSiteImpl<[!ClassName]>,
  43. [!endif]
  44. [!if=(ErrorInfoEnabled, "TRUE")]
  45.   public ISupportErrorInfo,
  46. [!endif]
  47. [!if=(ConnectionPointsEnabled, "TRUE")]
  48.   public IConnectionPointContainerImpl<[!ClassName]>,
  49.   public TEvents_[!CoClassName]<[!ClassName]>, 
  50. [!endif]
  51. [!if=(Dual, "TRUE")]
  52.   public IDispatchImpl<[!InterfaceName], &IID_[!InterfaceName], &LIBID_[!LibName]>
  53. [!else]
  54.   public [!InterfaceName]
  55. [!endif]
  56. {
  57. public:
  58.   [!ClassName]()
  59.   {
  60. [!if=(FreeThreadedMarshaler, "TRUE")]
  61.     m_pUnkMarshaler = NULL;
  62. [!endif]
  63.   }
  64.  
  65.   // Data used when registering Object 
  66.   //
  67. [!if=(ThreadingModel, "Single")]
  68.   DECLARE_THREADING_MODEL(otSingle);
  69. [!endif]
  70. [!if=(ThreadingModel, "Apartment")]
  71.   DECLARE_THREADING_MODEL(otApartment);
  72. [!endif]
  73. [!if=(ThreadingModel, "Free")]
  74.   DECLARE_THREADING_MODEL(otFree);
  75. [!endif]
  76. [!if=(ThreadingModel, "Both")]
  77.   DECLARE_THREADING_MODEL(otBoth);
  78. [!endif]
  79. [!if=(ThreadingModel, "Neutral")]
  80.   DECLARE_THREADING_MODEL(otNeutral);
  81. [!endif]
  82.   DECLARE_PROGID("");
  83.   DECLARE_DESCRIPTION("[!Description]");
  84.  
  85.   // Function invoked to (un)register object
  86.   //
  87.   static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
  88.   {
  89.     TTypedComServerRegistrarT<[!ClassName]> 
  90.     regObj(GetObjectCLSID(), GetProgID(), GetDescription());
  91.     return regObj.UpdateRegistry(bRegister);
  92.   }
  93.  
  94.  
  95. [!if=(Aggregatable, "NO")]
  96. DECLARE_NOT_AGGREGATABLE([!ClassName])
  97.  
  98. [!endif]
  99. [!if=(Aggregatable, "ONLY")]
  100. DECLARE_ONLY_AGGREGATABLE([!ClassName])
  101.  
  102. [!endif]
  103. [!if=(NeedsGetControllingUnknown, "TRUE")]
  104. DECLARE_GET_CONTROLLING_UNKNOWN()
  105.  
  106. [!endif]
  107. BEGIN_COM_MAP([!ClassName])
  108.   COM_INTERFACE_ENTRY([!InterfaceName])
  109. [!if=(Dual, "TRUE")]
  110.   COM_INTERFACE_ENTRY2(IDispatch, [!InterfaceName])
  111. [!endif]
  112. [!if=(ErrorInfoEnabled, "TRUE")]
  113.   COM_INTERFACE_ENTRY(ISupportErrorInfo)
  114. [!endif]
  115. [!if=(ConnectionPointsEnabled, "TRUE")]
  116.   COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  117. [!endif]
  118. [!if=(FreeThreadedMarshaler, "TRUE")]
  119.   COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  120. [!endif]
  121. [!if=(IObjectWithSite, "TRUE")]
  122.   COM_INTERFACE_ENTRY_IMPL(IObjectWithSite)
  123. [!endif]
  124. END_COM_MAP()
  125.  
  126. [!if=(ConnectionPointsEnabled, "TRUE")]
  127. BEGIN_CONNECTION_POINT_MAP([!ClassName])
  128.   CONNECTION_POINT_ENTRY(DIID_I[!CoClassName]Events)
  129. END_CONNECTION_POINT_MAP()
  130.  
  131. [!endif]
  132. [!if=(FreeThreadedMarshaler, "TRUE")]
  133.   HRESULT FinalConstruct()
  134.   {
  135.     return CoCreateFreeThreadedMarshaler(GetControllingUnknown(), &m_pUnkMarshaler.p);
  136.   }
  137.  
  138.   void FinalRelease()
  139.   {
  140.     m_pUnkMarshaler.Release();
  141.   }
  142.  
  143.   CComPtr<IUnknown> m_pUnkMarshaler;
  144.  
  145. [!endif]
  146. [!if=(ErrorInfoEnabled, "TRUE")]
  147. // ISupportsErrorInfo
  148.   STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  149.  
  150. [!endif]
  151. // [!InterfaceName]
  152. public:
  153.  
  154. };
  155.  
  156. #endif //[!IDEHeaderName]
  157.