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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * OBJECT1.H
  3.  *
  4.  * Definition of the CObject1 class that uses interface
  5.  * implementations 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 _OBJECT1_H_
  14. #define _OBJECT1_H_
  15. //Creation function
  16. BOOL CreateObject1(IUnknown **);
  17. /*
  18.  * The object we want to provide in OLE supports the IUnknown,
  19.  * ISampleOne, and ISampleTwo interfaces.
  20.  *
  21.  * The C++ class, CObject1, implements these interfaces with
  22.  * "interface implementations" where the C++ class itself inherits
  23.  * from and implements IUnknown members and then contains
  24.  * other C++ classes that each separately inherit from the other
  25.  * interfaces.  The other classes are the "interface implementations."
  26.  */
  27. /*
  28.  * In this technique you'll generally need forward references
  29.  * like this for use in declaring the object class.
  30.  */
  31. class CImpISampleOne;
  32. typedef CImpISampleOne *PCImpISampleOne;
  33. class CImpISampleTwo;
  34. typedef CImpISampleTwo *PCImpISampleTwo;
  35. //The C++ class that manages the actual object.
  36. class CObject1 : public IUnknown
  37.     {
  38.     /*
  39.      * Usually interface implementations will need back pointers
  40.      * to the object itself since this object usually manages
  41.      * the important data members.  In that case, make the
  42.      * interface implementation classes friends of the object.
  43.      */
  44.     friend CImpISampleOne;
  45.     friend CImpISampleTwo;
  46.     private:
  47.         DWORD           m_cRef;         //Object reference count
  48.         /*
  49.          * I use "m_pImpI" as a prefix to differentiate interface
  50.          * implementations for this object from other interface
  51.          * pointer variables I might hold to other objects, whic
  52.          * would be prefixed with "m_pI".
  53.          */
  54.         PCImpISampleOne  m_pImpISampleOne;
  55.         PCImpISampleTwo  m_pImpISampleTwo;
  56.     public:
  57.         CObject1(void);
  58.         ~CObject1(void);
  59.         BOOL Init(void);
  60.         //IUnknown members
  61.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  62.         STDMETHODIMP_(DWORD) AddRef(void);
  63.         STDMETHODIMP_(DWORD) Release(void);
  64.     };
  65. typedef CObject1 *PCObject1;
  66. /*
  67.  * Interface implementation classes are C++ classes that
  68.  * each singly inherit from an interface.  Their IUnknown
  69.  * members delegate calls to CObject1's IUnknown members--
  70.  * since IUnknown members affect the entire *object*, and
  71.  * since these interfaces are not the object itself, we must
  72.  * delegate to implement the correct behavior.
  73.  */
  74. class CImpISampleOne : public ISampleOne
  75.     {
  76.     private:
  77.         DWORD       m_cRef;         //For debugging
  78.         PCObject1   m_pObj;         //Back pointer for delegation
  79.     public:
  80.         CImpISampleOne(PCObject1);
  81.         ~CImpISampleOne(void);
  82.         //IUnknown members
  83.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  84.         STDMETHODIMP_(DWORD) AddRef(void);
  85.         STDMETHODIMP_(DWORD) Release(void);
  86.         //ISampleOne members
  87.         STDMETHODIMP         GetMessage(LPTSTR, UINT);
  88.     };
  89. class CImpISampleTwo : public ISampleTwo
  90.     {
  91.     private:
  92.         DWORD       m_cRef;         //For debugging
  93.         PCObject1   m_pObj;         //Back pointer for delegation
  94.     public:
  95.         CImpISampleTwo(PCObject1);
  96.         ~CImpISampleTwo(void);
  97.         //IUnknown members
  98.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  99.         STDMETHODIMP_(DWORD) AddRef(void);
  100.         STDMETHODIMP_(DWORD) Release(void);
  101.         //ISampleTwo members
  102.         STDMETHODIMP         GetString(LPTSTR, UINT);
  103.     };
  104. #endif _OBJECT1_H_