home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / chap06 / ekoala4 / koala.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  3KB  |  123 lines

  1. /*
  2.  * KOALA.H
  3.  * Koala Object with Custom Interface, Chapter 6
  4.  *
  5.  * Classes that implement the CKoala object with a custom interface
  6.  * to demonstrate local/remote transparency.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14.  
  15.  
  16. #ifndef _KOALA_H_
  17. #define _KOALA_H_
  18.  
  19. #define CHAPTER6
  20. #include <inole.h>
  21. #include <ianimal.h>
  22. #include <ikoala.h>
  23.  
  24. //KOALA.CPP
  25.  
  26. //CHAPTER6MOD
  27. class CImpIAnimal;
  28. typedef CImpIAnimal *PCImpIAnimal;
  29.  
  30. class CImpIKoala;
  31. typedef CImpIKoala *PCImpIKoala;
  32. //End CHAPTER6MOD
  33.  
  34. class CKoala : public IUnknown
  35.     {
  36.     //CHAPTER6MOD
  37.     friend class CImpIAnimal;
  38.     friend class CImpIKoala;
  39.     //End CHAPTER6MOD
  40.  
  41.     protected:
  42.         ULONG           m_cRef;         //Object reference count
  43.         LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
  44.  
  45.         PFNDESTROYED    m_pfnDestroy;   //To call on closure
  46.  
  47.         //CHAPTER6MOD
  48.         PCImpIAnimal    m_pImpIAnimal;  //Our interfaces
  49.         PCImpIKoala     m_pImpIKoala;
  50.  
  51.         BOOL            m_fJustAte;
  52.         short           m_cSleepAfterEat;
  53.         //CHAPTER6MOD
  54.  
  55.     public:
  56.         CKoala(LPUNKNOWN, PFNDESTROYED);
  57.         ~CKoala(void);
  58.  
  59.         BOOL Init(void);
  60.  
  61.         //Non-delegating object IUnknown
  62.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  63.         STDMETHODIMP_(ULONG) AddRef(void);
  64.         STDMETHODIMP_(ULONG) Release(void);
  65.     };
  66.  
  67. typedef CKoala *PCKoala;
  68.  
  69.  
  70. //CHAPTER6MOD
  71. //IAnimal interface implementation
  72.  
  73. class CImpIAnimal : public IAnimal
  74.     {
  75.     protected:
  76.         ULONG           m_cRef;      //Interface reference count
  77.         PCKoala         m_pObj;      //Back pointer to the object
  78.         LPUNKNOWN       m_pUnkOuter; //For delegation
  79.  
  80.     public:
  81.         CImpIAnimal(PCKoala, LPUNKNOWN);
  82.         ~CImpIAnimal(void);
  83.  
  84.         //IUnknown members
  85.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  86.         STDMETHODIMP_(ULONG) AddRef(void);
  87.         STDMETHODIMP_(ULONG) Release(void);
  88.  
  89.         //IAnimal members
  90.         STDMETHODIMP Eat(LPTSTR, LPTSTR, short);
  91.         STDMETHODIMP Sleep(short *);
  92.         STDMETHODIMP Procreate(short *);
  93.         STDMETHODIMP WhatKindOfAnimal(IID *);
  94.     };
  95.  
  96.  
  97. //IKoala interface implementation
  98.  
  99. class CImpIKoala : public IKoala
  100.     {
  101.     protected:
  102.         ULONG           m_cRef;      //Interface reference count
  103.         PCKoala         m_pObj;      //Back pointer to the object
  104.         LPUNKNOWN       m_pUnkOuter; //For delegation
  105.  
  106.     public:
  107.         CImpIKoala(PCKoala, LPUNKNOWN);
  108.         ~CImpIKoala(void);
  109.  
  110.         //IUnknown members
  111.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  112.         STDMETHODIMP_(ULONG) AddRef(void);
  113.         STDMETHODIMP_(ULONG) Release(void);
  114.  
  115.         //IKoala members
  116.         STDMETHODIMP ClimbEucalyptusTree(short);
  117.         STDMETHODIMP PouchOpensDown(void);
  118.         STDMETHODIMP SleepAfterEating(short);
  119.     };
  120. //End CHAPTER6MOD
  121.  
  122. #endif //_KOALA_H_
  123.