home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / tutsamp / stoserve / connect.h < prev    next >
C/C++ Source or Header  |  1997-08-05  |  9KB  |  261 lines

  1. /*+==========================================================================
  2.   File:      CONNECT.H
  3.  
  4.   Summary:   Include file declaring COM object classes and constants for
  5.              managing the connection points (and their connections)
  6.              exposed by the connectable objects in the STOSERVE server.
  7.  
  8.              For a comprehensive tutorial code tour of this module's
  9.              contents and offerings see the tutorial STOSERVE.HTM
  10.              file. For more specific technical details on the internal
  11.              workings see the comments dispersed throughout the module's
  12.              source code.
  13.  
  14.   Functions: .
  15.  
  16.   Classes:   COEnumConnectionPoints, COConnectionPoint, and
  17.              COEnumConnections.
  18.  
  19.   Origin:    6-10-96: atrent - Editor inheritance from the CONSERVE COM
  20.              Tutorial Code Sample. Very little change was required.
  21.  
  22. ----------------------------------------------------------------------------
  23.   This file is part of the Microsoft COM Tutorial Code Samples.
  24.  
  25.   Copyright (C) Microsoft Corporation, 1997.  All rights reserved.
  26.  
  27.   This source code is intended only as a supplement to Microsoft
  28.   Development Tools and/or on-line documentation.  See these other
  29.   materials for detailed information regarding Microsoft code samples.
  30.  
  31.   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  32.   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  33.   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  34.   PARTICULAR PURPOSE.
  35. ==========================================================================+*/
  36.  
  37. #if !defined(CONNECT_H)
  38. #define CONNECT_H
  39.  
  40. #ifdef __cplusplus
  41.  
  42.  
  43. // An enumeration giving symbol names for the connection
  44. // points offered by the DllPaper component in this server.
  45. enum
  46. {
  47.   CONNPOINT_PAPERSINK = 0
  48. };
  49.  
  50. enum
  51. {
  52.   // The maximum number of connection points offered by the DllPaper
  53.   // component in this STOSERVE server.  The number of items in the
  54.   // connection point enumeration above.
  55.   MAX_CONNECTION_POINTS = 1,
  56.  
  57.   // A constant for the number of connections to add to the allocation
  58.   // of the dynamic connection array.
  59.   ALLOC_CONNECTIONS = 8,
  60.  
  61.   // The start value for the connection key (cookie) counter.
  62.   COOKIE_START_VALUE = 500
  63. };
  64.  
  65.  
  66. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  67.   ObjectClass: COEnumConnectionPoints
  68.  
  69.   Summary:     COM object class for enumerating the Connection Points
  70.                offered by a connectable object.
  71.  
  72.   Interfaces:  IUnknown
  73.                  Standard interface providing COM object features.
  74.                IEnumConnectionPoints
  75.                  Interface for connection point enumeration.
  76.  
  77.   Aggregation: COEnumConnectionPoints COM Objects are not aggregatable.
  78. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  79. class COEnumConnectionPoints : public IEnumConnectionPoints
  80. {
  81.   public:
  82.     // Main Object Constructor & Destructor.
  83.     COEnumConnectionPoints(IUnknown* pHostObj);
  84.     ~COEnumConnectionPoints(void);
  85.  
  86.     // A general method for initializing this newly created object.
  87.     // Creates any subordinate arrays, structures, or objects.
  88.     HRESULT Init(
  89.               ULONG cConnPts,
  90.               IConnectionPoint** paConnPts,
  91.               ULONG iEnumIndex);
  92.  
  93.     // IUnknown methods. Main object, non-delegating.
  94.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  95.     STDMETHODIMP_(ULONG) AddRef(void);
  96.     STDMETHODIMP_(ULONG) Release(void);
  97.  
  98.     // IEnumConnectionPoints methods.
  99.     STDMETHODIMP         Next(ULONG, IConnectionPoint**, ULONG*);
  100.     STDMETHODIMP         Skip(ULONG);
  101.     STDMETHODIMP         Reset(void);
  102.     STDMETHODIMP         Clone(IEnumConnectionPoints**);
  103.  
  104.   private:
  105.     // Private data of COEnumConnectionPoints COM objects.
  106.  
  107.     // Main Object reference count.
  108.     ULONG              m_cRefs;
  109.  
  110.     // IUnknown pointer to host COM object being enumerated.
  111.     IUnknown*          m_pHostObj;
  112.  
  113.     // Connection Point index variable.
  114.     ULONG              m_iEnumIndex;
  115.  
  116.     // Number of Connection Points being enumerated.
  117.     ULONG              m_cConnPts;
  118.  
  119.     // Allocated array of Connection Point interface pointers.
  120.     IConnectionPoint** m_paConnPts;
  121. };
  122.  
  123. typedef COEnumConnectionPoints* PCOEnumConnectionPoints;
  124.  
  125.  
  126. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  127.   ObjectClass: COConnectionPoint
  128.  
  129.   Summary:     Connection Point COM object class. Implements a native
  130.                IConnectionPoint interface. The Advise, Unadvise, and
  131.                EnumConnections methods use the CThreaded OwnThis mechanism
  132.                to provide thread-safe mutually exclusive access to this
  133.                connection point object.
  134.  
  135.   Interfaces:  IUnknown
  136.                  Standard interface providing COM object features.
  137.                IConnectionPoint
  138.                  Interface for connection point features.
  139.  
  140.   Aggregation: COConnectionPoint COM Objects are not aggregatable.
  141. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  142. class COConnectionPoint : public IConnectionPoint, public CThreaded
  143. {
  144.   public:
  145.     // Main Object Constructor & Destructor.
  146.     COConnectionPoint(IUnknown* pHostObj);
  147.     ~COConnectionPoint(void);
  148.  
  149.     // A general method for initializing this newly created object.
  150.     // Creates any subordinate arrays, structures, or objects.
  151.     HRESULT Init(REFIID riid);
  152.  
  153.     // IUnknown methods. Main object, non-delegating.
  154.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  155.     STDMETHODIMP_(ULONG) AddRef(void);
  156.     STDMETHODIMP_(ULONG) Release(void);
  157.  
  158.     // IConnectionPoint methods.
  159.     STDMETHODIMP GetConnectionInterface(IID*);
  160.     STDMETHODIMP GetConnectionPointContainer(IConnectionPointContainer**);
  161.     STDMETHODIMP Advise(IUnknown*, DWORD*);
  162.     STDMETHODIMP Unadvise(DWORD);
  163.     STDMETHODIMP EnumConnections(IEnumConnections**);
  164.  
  165.   private:
  166.     // Private utility methods of COConnectionPoint.
  167.     HRESULT GetSlot(UINT* puiFreeSlot);
  168.     HRESULT FindSlot(DWORD dwCookie, UINT* puiSlot);
  169.  
  170.     // Private data of COConnectionPoint COM objects.
  171.  
  172.     // Main Object reference count.
  173.     ULONG          m_cRefs;
  174.  
  175.     // IUnknown pointer to host COM object offering this connection point.
  176.     IUnknown*      m_pHostObj;
  177.  
  178.     // The IID of the sink interface associated with this connection point.
  179.     IID            m_iidSink;
  180.  
  181.     // The current connection cookie (key) counter.
  182.     DWORD          m_dwNextCookie;
  183.  
  184.     // The current number of live sink connections to this connection point.
  185.     UINT           m_cConnections;
  186.  
  187.     // The current maximum index into the dynamic connection array.
  188.     UINT           m_uiMaxIndex;
  189.  
  190.     // The dynamic array of sink connections to this connection point.
  191.     CONNECTDATA*   m_paConnections;
  192. };
  193.  
  194. typedef COConnectionPoint* PCOConnectionPoint;
  195.  
  196.  
  197. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  198.   ObjectClass: COEnumConnections
  199.  
  200.   Summary:     COM object class for enumerating the connections of a
  201.                connection point of a connectable object.
  202.  
  203.   Interfaces:  IUnknown
  204.                  Standard interface providing COM object features.
  205.                IEnumConnections
  206.                  Interface for connection enumeration features.
  207.  
  208.   Aggregation: COEnumConnections COM Objects are not aggregatable.
  209. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  210. class COEnumConnections : public IEnumConnections
  211. {
  212.   public:
  213.     // Main Object Constructor & Destructor.
  214.     COEnumConnections(IUnknown* pHostObj);
  215.     ~COEnumConnections(void);
  216.  
  217.     // A general method for initializing this newly created object.
  218.     // Creates any subordinate arrays, structures, or objects.
  219.     HRESULT Init(
  220.               ULONG cConnections,
  221.               CONNECTDATA* paConnections,
  222.               ULONG iEnumIndex);
  223.  
  224.     // IUnknown methods. Main object, non-delegating.
  225.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  226.     STDMETHODIMP_(ULONG) AddRef(void);
  227.     STDMETHODIMP_(ULONG) Release(void);
  228.  
  229.     // IEnumConnections methods.
  230.     STDMETHODIMP         Next(ULONG, CONNECTDATA*, ULONG*);
  231.     STDMETHODIMP         Skip(ULONG);
  232.     STDMETHODIMP         Reset(void);
  233.     STDMETHODIMP         Clone(IEnumConnections**);
  234.  
  235.   private:
  236.     // Private data of COEnumConnections COM objects.
  237.  
  238.     // Main Object reference count.
  239.     ULONG            m_cRefs;
  240.  
  241.     // IUnknown pointer to host connection point COM object being
  242.     // enumerated.
  243.     IUnknown*        m_pHostObj;
  244.  
  245.     // Connection index variable.
  246.     ULONG            m_iEnumIndex;
  247.  
  248.     // Number of Connections being enumerated.
  249.     ULONG            m_cConnections;
  250.  
  251.     // Allocated array of live Connections only.
  252.     CONNECTDATA*     m_paConnections;
  253. };
  254.  
  255. typedef COEnumConnections* PCOEnumConnections;
  256.  
  257. #endif // __cplusplus
  258.  
  259.  
  260. #endif // CONNECT_H
  261.