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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * OBJECT2.H
  3.  *
  4.  * Definition of the CObject1 class that uses contained
  5.  * classes to provide ISampleOne and ISampleTwo.
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13. #ifndef _OBJECT2_H_
  14. #define _OBJECT2_H_
  15. //Creation function
  16. BOOL CreateObject2(IUnknown **);
  17. /*
  18.  * The object we want to provide in OLE supports the IUnknown,
  19.  * ISampleOne, and ISampleTwo interfaces.
  20.  *
  21.  * The C++ class, CObject2, implements these interfaces with
  22.  * contained classes where each contained class inherits singly
  23.  * from an interface.  This is a little different from interface
  24.  * implementations shown in Object1 because contained classes
  25.  * are automatically instantiated along with CObject2.
  26.  */
  27. //The C++ class that manages the actual object.
  28. class CObject2 : public IUnknown
  29.     {
  30.     /*
  31.      * Declare the contained classes, which should be friends.
  32.      * As with interface implementations, these need back
  33.      * pointers to the outer object as well as the IUnknown to
  34.      * which to delegate, which are the constructor parameters.
  35.      */
  36.     class CImpISampleOne : public ISampleOne
  37.         {
  38.         private:
  39.             DWORD       m_cRef;         //For debugging
  40.             CObject2   *m_pObj;         //Back pointer for delegation
  41.         public:
  42.             CImpISampleOne(CObject2 *pObj)
  43.                 { m_cRef=0; m_pObj=pObj; }
  44.             ~CImpISampleOne(void)
  45.                 { }
  46.             //IUnknown members
  47.             STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  48.             STDMETHODIMP_(DWORD) AddRef(void);
  49.             STDMETHODIMP_(DWORD) Release(void);
  50.             //ISampleOne members
  51.             STDMETHODIMP         GetMessage(LPTSTR, UINT);
  52.         };
  53.     class CImpISampleTwo : public ISampleTwo
  54.         {
  55.         private:
  56.             DWORD       m_cRef;         //For debugging
  57.             CObject2   *m_pObj;         //Back pointer for delegation
  58.         public:
  59.             CImpISampleTwo(CObject2 *pObj)
  60.                 { m_cRef=0; m_pObj=pObj; }
  61.             ~CImpISampleTwo(void)
  62.                 { }
  63.             //IUnknown members
  64.             STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  65.             STDMETHODIMP_(DWORD) AddRef(void);
  66.             STDMETHODIMP_(DWORD) Release(void);
  67.             //ISampleTwo members
  68.             STDMETHODIMP         GetString(LPTSTR, UINT);
  69.         };
  70.     friend CImpISampleOne;
  71.     friend CImpISampleTwo;
  72.     private:
  73.         DWORD           m_cRef;         //Object reference count
  74.         /*
  75.          * In this technique I still use "ImpI" prefixes to
  76.          * differentiate contained classes.  The difference here
  77.          * from Object1 is that we declare objects instead of
  78.          * pointers to objects, so instantiating CObject2 will
  79.          * automatically instantiate CImpI*.  Destroying CObject2
  80.          * will automatically destroy CImp*.
  81.          */
  82.         CImpISampleOne  m_ImpISampleOne;
  83.         CImpISampleTwo  m_ImpISampleTwo;
  84.     public:
  85.         CObject2(void);
  86.         ~CObject2(void);
  87.         //IUnknown members
  88.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  89.         STDMETHODIMP_(DWORD) AddRef(void);
  90.         STDMETHODIMP_(DWORD) Release(void);
  91.     };
  92. typedef CObject2 *PCObject2;
  93. #endif _OBJECT2_H_