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 / koalaprx / koala.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  5KB  |  176 lines

  1. /*
  2.  * KOALA.H
  3.  * Koala Custom Marshaling Proxy Chapter 6
  4.  *
  5.  * Classes that implement the CKoala object exposed from this
  6.  * proxy server that communicates with a local Koala through
  7.  * custom marshaling.
  8.  *
  9.  * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
  10.  *
  11.  * Kraig Brockschmidt, Microsoft
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _KOALA_H_
  18. #define _KOALA_H_
  19.  
  20. #define CHAPTER6
  21. #include <inole.h>
  22. #ifdef WIN32
  23. #include <ianimal.h>
  24. #include <ikoala.h>
  25. #else
  26. //Non-MIDL generated versions
  27. #include <ianim16.h>
  28. #include <ikoala16.h>
  29. #endif
  30.  
  31.  
  32.  
  33. /*
  34.  * Marshaling packet data structure as used by our IMarshal.
  35.  * This is duplicated in ..\ekoala5\koala.h.
  36.  */
  37. typedef struct
  38.     {
  39.     HWND        hWnd;       //Message window
  40.     } KOALAMARSHAL, *PKOALAMARSHAL;
  41.  
  42. //Intertask messages, duplicated in ..\ekoala5\koala.h.
  43. #define MSG_RELEASE             1000
  44. #define MSG_EAT                 1001
  45. #define MSG_SLEEP               1002
  46. #define MSG_PROCREATE           1003
  47. #define MSG_SLEEPAFTEREATING    1004
  48.  
  49.  
  50. //KOALA.CPP
  51. class CImpIAnimal;
  52. typedef CImpIAnimal *PCImpIAnimal;
  53.  
  54. class CImpIKoala;
  55. typedef CImpIKoala *PCImpIKoala;
  56.  
  57. class CImpIMarshal;
  58. typedef CImpIMarshal *PCImpIMarshal;
  59.  
  60.  
  61. class CKoala : public IUnknown
  62.     {
  63.     friend class CImpIAnimal;
  64.     friend class CImpIKoala;
  65.     friend class CImpIMarshal;
  66.  
  67.     protected:
  68.         ULONG           m_cRef;         //Object reference count
  69.         LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
  70.  
  71.         PFNDESTROYED    m_pfnDestroy;   //To call on closure
  72.  
  73.         PCImpIAnimal    m_pImpIAnimal;  //Our interfaces
  74.         PCImpIKoala     m_pImpIKoala;
  75.         PCImpIMarshal   m_pImpIMarshal;
  76.  
  77.         BOOL            m_fJustAte;
  78.         short           m_cSleepAfterEat;
  79.  
  80.         HWND            m_hWndLocal;    //Local object
  81.  
  82.     public:
  83.         CKoala(LPUNKNOWN, PFNDESTROYED);
  84.         ~CKoala(void);
  85.  
  86.         BOOL    Init(void);
  87.         DWORD   CallLocal(UINT, LPARAM, BOOL);
  88.  
  89.         //Non-delegating object IUnknown
  90.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  91.         STDMETHODIMP_(ULONG) AddRef(void);
  92.         STDMETHODIMP_(ULONG) Release(void);
  93.     };
  94.  
  95. typedef CKoala *PCKoala;
  96.  
  97.  
  98. //IAnimal interface implementation
  99.  
  100. class CImpIAnimal : public IAnimal
  101.     {
  102.     protected:
  103.         ULONG           m_cRef;      //Interface reference count
  104.         PCKoala         m_pObj;      //Back pointer to the object
  105.         LPUNKNOWN       m_pUnkOuter; //For delegation
  106.  
  107.     public:
  108.         CImpIAnimal(PCKoala, LPUNKNOWN);
  109.         ~CImpIAnimal(void);
  110.  
  111.         //IUnknown members
  112.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  113.         STDMETHODIMP_(ULONG) AddRef(void);
  114.         STDMETHODIMP_(ULONG) Release(void);
  115.  
  116.         //IAnimal members
  117.         STDMETHODIMP Eat(LPTSTR, LPTSTR, short);
  118.         STDMETHODIMP Sleep(short *);
  119.         STDMETHODIMP Procreate(short *);
  120.         STDMETHODIMP WhatKindOfAnimal(IID *);
  121.     };
  122.  
  123.  
  124. //IKoala interface implementation
  125.  
  126. class CImpIKoala : public IKoala
  127.     {
  128.     protected:
  129.         ULONG           m_cRef;      //Interface reference count
  130.         PCKoala         m_pObj;      //Back pointer to the object
  131.         LPUNKNOWN       m_pUnkOuter; //For delegation
  132.  
  133.     public:
  134.         CImpIKoala(PCKoala, LPUNKNOWN);
  135.         ~CImpIKoala(void);
  136.  
  137.         //IUnknown members
  138.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  139.         STDMETHODIMP_(ULONG) AddRef(void);
  140.         STDMETHODIMP_(ULONG) Release(void);
  141.  
  142.         //IKoala members
  143.         STDMETHODIMP ClimbEucalyptusTree(short);
  144.         STDMETHODIMP PouchOpensDown(void);
  145.         STDMETHODIMP SleepAfterEating(short);
  146.     };
  147.  
  148.  
  149. class CImpIMarshal : public IMarshal
  150.     {
  151.     protected:
  152.         ULONG           m_cRef;      //Interface reference count
  153.         PCKoala         m_pObj;      //Back pointer to the object
  154.         LPUNKNOWN       m_pUnkOuter; //For delegation
  155.  
  156.     public:
  157.         CImpIMarshal(PCKoala, LPUNKNOWN);
  158.         ~CImpIMarshal(void);
  159.  
  160.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  161.         STDMETHODIMP_(ULONG) AddRef(void);
  162.         STDMETHODIMP_(ULONG) Release(void);
  163.  
  164.         STDMETHODIMP GetUnmarshalClass(REFIID, LPVOID, DWORD
  165.             , LPVOID, DWORD, LPCLSID);
  166.         STDMETHODIMP GetMarshalSizeMax(REFIID, LPVOID, DWORD
  167.             , LPVOID, DWORD, LPDWORD);
  168.         STDMETHODIMP MarshalInterface(LPSTREAM, REFIID, LPVOID
  169.             , DWORD, LPVOID, DWORD);
  170.         STDMETHODIMP UnmarshalInterface(LPSTREAM, REFIID, LPVOID *);
  171.         STDMETHODIMP ReleaseMarshalData(LPSTREAM);
  172.         STDMETHODIMP DisconnectObject(DWORD);
  173.     };
  174.  
  175. #endif //_KOALA_H_
  176.