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 / conserve / connect.h < prev    next >
C/C++ Source or Header  |  1997-08-05  |  9KB  |  260 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 CONSERVE server.
  7.  
  8.              For a comprehensive tutorial code tour of this module's
  9.              contents and offerings see the tutorial CONSERVE.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-3-96: atrent - Created for the CONSERVE Tutorial
  20.              Code Sample.
  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. // An enumeration giving symbol names array indexes of the connection
  43. // points offered by the DllSndBall component in this server.
  44. enum
  45. {
  46.   CONNPOINT_BALLSINK = 0
  47. };
  48.  
  49. enum
  50. {
  51.   // The maximum number of connection points offered by the DllSndBall
  52.   // component in this CONSERVE server.  The number of items in the
  53.   // connection point enumeration above.
  54.   MAX_CONNECTION_POINTS = 1,
  55.  
  56.   // A constant for the number of connections to add to the allocation
  57.   // of the dynamic connection array.
  58.   ALLOC_CONNECTIONS = 8,
  59.  
  60.   // The start value for the connection key (cookie) counter.
  61.   COOKIE_START_VALUE = 400
  62. };
  63.  
  64.  
  65. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  66.   ObjectClass: COEnumConnectionPoints
  67.  
  68.   Summary:     COM object class for enumerating the Connection Points of
  69.                offered by a connectable object.
  70.  
  71.   Interfaces:  IUnknown
  72.                  Standard interface providing COM object features.
  73.                IEnumConnectionPoints
  74.                  Interface for connection point enumeration.
  75.  
  76.   Aggregation: COEnumConnectionPoints COM Objects are not aggregatable.
  77. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  78. class COEnumConnectionPoints : public IEnumConnectionPoints
  79. {
  80.   public:
  81.     // Main Object Constructor & Destructor.
  82.     COEnumConnectionPoints(IUnknown* pHostObj);
  83.     ~COEnumConnectionPoints(void);
  84.  
  85.     // A general method for initializing this newly created object.
  86.     // Creates any subordinate arrays, structures, or objects.
  87.     HRESULT Init(
  88.               ULONG cConnPts,
  89.               IConnectionPoint** paConnPts,
  90.               ULONG iEnumIndex);
  91.  
  92.     // IUnknown methods. Main object, non-delegating.
  93.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  94.     STDMETHODIMP_(ULONG) AddRef(void);
  95.     STDMETHODIMP_(ULONG) Release(void);
  96.  
  97.     // IEnumConnectionPoints methods.
  98.     STDMETHODIMP         Next(ULONG, IConnectionPoint**, ULONG*);
  99.     STDMETHODIMP         Skip(ULONG);
  100.     STDMETHODIMP         Reset(void);
  101.     STDMETHODIMP         Clone(IEnumConnectionPoints**);
  102.  
  103.   private:
  104.     // Private data of COEnumConnectionPoints COM objects.
  105.  
  106.     // Main Object reference count.
  107.     ULONG              m_cRefs;
  108.  
  109.     // IUnknown pointer to host COM object being enumerated.
  110.     IUnknown*          m_pHostObj;
  111.  
  112.     // Connection Point index variable.
  113.     ULONG              m_iEnumIndex;
  114.  
  115.     // Number of Connection Points being enumerated.
  116.     ULONG              m_cConnPts;
  117.  
  118.     // Allocated array of Connection Point interface pointers.
  119.     IConnectionPoint** m_paConnPts;
  120. };
  121.  
  122. typedef COEnumConnectionPoints* PCOEnumConnectionPoints;
  123.  
  124.  
  125. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  126.   ObjectClass: COConnectionPoint
  127.  
  128.   Summary:     Connection Point COM object class. Implements a native
  129.                IConnectionPoint interface. The Advise, Unadvise, and
  130.                EnumConnections methods use the CThreaded OwnThis mechanism
  131.                to provide thread-safe mutually exclusive access to this
  132.                connection point object.
  133.  
  134.   Interfaces:  IUnknown
  135.                  Standard interface providing COM object features.
  136.                IConnectionPoint
  137.                  Interface for connection point features.
  138.  
  139.   Aggregation: COConnectionPoint COM Objects are not aggregatable.
  140. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  141. class COConnectionPoint : public IConnectionPoint, public CThreaded
  142. {
  143.   public:
  144.     // Main Object Constructor & Destructor.
  145.     COConnectionPoint(IUnknown* pHostObj);
  146.     ~COConnectionPoint(void);
  147.  
  148.     // A general method for initializing this newly created object.
  149.     // Creates any subordinate arrays, structures, or objects.
  150.     HRESULT Init(REFIID riid);
  151.  
  152.     // IUnknown methods. Main object, non-delegating.
  153.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  154.     STDMETHODIMP_(ULONG) AddRef(void);
  155.     STDMETHODIMP_(ULONG) Release(void);
  156.  
  157.     // IConnectionPoint methods.
  158.     STDMETHODIMP GetConnectionInterface(IID*);
  159.     STDMETHODIMP GetConnectionPointContainer(IConnectionPointContainer**);
  160.     STDMETHODIMP Advise(IUnknown*, DWORD*);
  161.     STDMETHODIMP Unadvise(DWORD);
  162.     STDMETHODIMP EnumConnections(IEnumConnections**);
  163.  
  164.   private:
  165.     // Private utility methods of COConnectionPoint.
  166.     HRESULT GetSlot(UINT* puiFreeSlot);
  167.     HRESULT FindSlot(DWORD dwCookie, UINT* puiSlot);
  168.  
  169.     // Private data of COConnectionPoint COM objects.
  170.  
  171.     // Main Object reference count.
  172.     ULONG          m_cRefs;
  173.  
  174.     // IUnknown pointer to host COM object offering this connection point.
  175.     IUnknown*      m_pHostObj;
  176.  
  177.     // The IID of the sink interface associated with this connection point.
  178.     IID            m_iidSink;
  179.  
  180.     // The current connection cookie (key) counter.
  181.     DWORD          m_dwNextCookie;
  182.  
  183.     // The current number of live sink connections to this connection point.
  184.     UINT           m_cConnections;
  185.  
  186.     // The current maximum index into the dynamic connection array.
  187.     UINT           m_uiMaxIndex;
  188.  
  189.     // The dynamic array of sink connections to this connection point.
  190.     CONNECTDATA*   m_paConnections;
  191. };
  192.  
  193. typedef COConnectionPoint* PCOConnectionPoint;
  194.  
  195.  
  196. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  197.   ObjectClass: COEnumConnections
  198.  
  199.   Summary:     COM object class for enumerating the connections of
  200.                a connection point of a connectable object.
  201.  
  202.   Interfaces:  IUnknown
  203.                  Standard interface providing COM object features.
  204.                IEnumConnections
  205.                  Interface for connection enumeration features.
  206.  
  207.   Aggregation: COEnumConnections COM Objects are not aggregatable.
  208. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  209. class COEnumConnections : public IEnumConnections
  210. {
  211.   public:
  212.     // Main Object Constructor & Destructor.
  213.     COEnumConnections(IUnknown* pHostObj);
  214.     ~COEnumConnections(void);
  215.  
  216.     // A general method for initializing this newly created object.
  217.     // Creates any subordinate arrays, structures, or objects.
  218.     HRESULT Init(
  219.               ULONG cConnections,
  220.               CONNECTDATA* paConnections,
  221.               ULONG iEnumIndex);
  222.  
  223.     // IUnknown methods. Main object, non-delegating.
  224.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  225.     STDMETHODIMP_(ULONG) AddRef(void);
  226.     STDMETHODIMP_(ULONG) Release(void);
  227.  
  228.     // IEnumConnections methods.
  229.     STDMETHODIMP         Next(ULONG, CONNECTDATA*, ULONG*);
  230.     STDMETHODIMP         Skip(ULONG);
  231.     STDMETHODIMP         Reset(void);
  232.     STDMETHODIMP         Clone(IEnumConnections**);
  233.  
  234.   private:
  235.     // Private data of COEnumConnections COM objects.
  236.  
  237.     // Main Object reference count.
  238.     ULONG            m_cRefs;
  239.  
  240.     // IUnknown pointer to host connection point COM object being
  241.     // enumerated.
  242.     IUnknown*        m_pHostObj;
  243.  
  244.     // Connection index variable.
  245.     ULONG            m_iEnumIndex;
  246.  
  247.     // Number of Connections being enumerated.
  248.     ULONG            m_cConnections;
  249.  
  250.     // Allocated array of live Connections only.
  251.     CONNECTDATA*     m_paConnections;
  252. };
  253.  
  254. typedef COEnumConnections* PCOEnumConnections;
  255.  
  256. #endif // __cplusplus
  257.  
  258.  
  259. #endif // CONNECT_H
  260.