CONNECT.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:

Windows编程

开发平台:

Visual C++

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