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 / factory.h < prev    next >
C/C++ Source or Header  |  1997-08-05  |  5KB  |  134 lines

  1. /*+==========================================================================
  2.   File:      FACTORY.H
  3.  
  4.   Summary:   Include file for the class factory COM object: CFBall. This
  5.              constitutes the CONSERVE server's class factory for this COM
  6.              component.
  7.  
  8.              The multiple interface COM Object Classe is achieved via
  9.              the technique of nested classes: the implementation of the
  10.              IClassFactory interface is nested inside of the class
  11.              factory COM object class.
  12.  
  13.              For a comprehensive tutorial code tour of this module's
  14.              contents and offerings see the tutorial CONSERVE.HTM file.
  15.              For more specific technical details on the internal workings
  16.              see the comments dispersed throughout the module's source code.
  17.  
  18.   Classes:   CFBall.
  19.  
  20.   Functions: .
  21.  
  22.   Origin:    5-30-96: atrent - Editor-inheritance from FACTORY.H in
  23.                the FRESERVE Tutorial Code Sample.
  24.  
  25. ----------------------------------------------------------------------------
  26.   This file is part of the Microsoft COM Tutorial Code Samples.
  27.  
  28.   Copyright (C) Microsoft Corporation, 1997.  All rights reserved.
  29.  
  30.   This source code is intended only as a supplement to Microsoft
  31.   Development Tools and/or on-line documentation.  See these other
  32.   materials for detailed information regarding Microsoft code samples.
  33.  
  34.   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  35.   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  36.   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  37.   PARTICULAR PURPOSE.
  38. ==========================================================================+*/
  39.  
  40. #if !defined(FACTORY_H)
  41. #define FACTORY_H
  42.  
  43. #ifdef __cplusplus
  44.  
  45. /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  46.   ObjectClass: CFBall
  47.  
  48.   Summary:     Class Factory COM Object Class for DllSndBall COM
  49.                components. Used to manufacture COBall COM objects.  The
  50.                mulitple interfaces on this COM object class are
  51.                constructed via the nested interface classes technique.
  52.  
  53.   Interfaces:  IUnknown
  54.                  Standard interface providing COM object features.
  55.                IClassFactory
  56.                  Standard interface providing COM Class Factory features.
  57.  
  58.   Aggregation: Yes, CFBall COM objects are aggregatable by
  59.                passing a non-NULL pUnkOuter IUnknown pointer into the
  60.                constructor.
  61. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
  62. class CFBall : public IUnknown, public CThreaded
  63. {
  64.   public:
  65.     // Main Object Constructor & Destructor.
  66.     CFBall(IUnknown* pUnkOuter, CServer* pServer);
  67.     ~CFBall(void);
  68.  
  69.     // IUnknown methods. Main object, non-delegating.
  70.     STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  71.     STDMETHODIMP_(ULONG) AddRef(void);
  72.     STDMETHODIMP_(ULONG) Release(void);
  73.  
  74.     // We declare nested class interface implementations here.
  75.  
  76.     // We implement the IClassFactory interface (ofcourse) in this class
  77.     // factory COM object class.
  78.     class CImpIClassFactory : public IClassFactory, public CThreaded
  79.     {
  80.       public:
  81.         // Interface Implementation Constructor & Destructor.
  82.         CImpIClassFactory(
  83.           CFBall* pBackObj,
  84.           IUnknown* pUnkOuter,
  85.           CServer* pServer);
  86.         ~CImpIClassFactory(void);
  87.  
  88.         // IUnknown methods.
  89.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  90.         STDMETHODIMP_(ULONG) AddRef(void);
  91.         STDMETHODIMP_(ULONG) Release(void);
  92.  
  93.         // IClassFactory methods.
  94.         STDMETHODIMP         CreateInstance(IUnknown*, REFIID, PPVOID);
  95.         STDMETHODIMP         LockServer(BOOL);
  96.  
  97.       private:
  98.         // Data private to this interface implementation of IClassFactory.
  99.         CFBall*       m_pBackObj;    // Parent Object back pointer.
  100.         IUnknown*     m_pUnkOuter;   // Outer unknown for Delegation.
  101.         CServer*      m_pServer;     // Server's control object.
  102.     };
  103.  
  104.     // Make the otherwise private and nested IClassFactory interface
  105.     // implementation a friend to COM object instantiations of this
  106.     // selfsame CFBall COM object class.
  107.     friend CImpIClassFactory;
  108.  
  109.   private:
  110.     // Private data of CFBall COM objects.
  111.  
  112.     // Nested IClassFactory implementation instantiation.
  113.     CImpIClassFactory m_ImpIClassFactory;
  114.  
  115.     // Main Object reference count.
  116.     ULONG             m_cRefs;
  117.  
  118.     // Outer unknown (aggregation & delegation). Used when this
  119.     // CFBall object is being aggregated.  Otherwise it is used
  120.     // for delegation if this object is reused via containment.
  121.     IUnknown*         m_pUnkOuter;
  122.  
  123.     // Pointer to this component server's control object.
  124.     CServer*          m_pServer;
  125. };
  126.  
  127. typedef CFBall* PCFBall;
  128.  
  129.  
  130. #endif // __cplusplus
  131.  
  132.  
  133. #endif // FACTORY_H
  134.