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 / ekoala3 / ekoala3.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  4.3 KB  |  168 lines

  1. /*
  2.  * EKOALA3.H
  3.  * Koala Object EXE Server Chapter 6
  4.  *
  5.  * Definitions, classes, and prototypes for an application that
  6.  * provides Koala objects to any other object user.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14.  
  15.  
  16. #ifndef _EKOALA3_H_
  17. #define _EKOALA3_H_
  18.  
  19.  
  20. //Get the object definitions
  21. #include "koala.h"
  22.  
  23. //CHAPTER6MOD
  24. #define IDR_MENU            1
  25. #define IDM_CALLBLOCK       100
  26. #define IDM_CALLDELAY       101
  27. //End CHAPTER6MOD
  28.  
  29.  
  30. //EKOALA3.CPP
  31. LRESULT APIENTRY KoalaWndProc(HWND, UINT, WPARAM, LPARAM);
  32.  
  33. //CHAPTER6MOD
  34. class CMessageFilter;
  35. typedef CMessageFilter *PCMessageFilter;
  36. //End CHAPTER6MOD
  37.  
  38. class CApp
  39.     {
  40.     friend LRESULT APIENTRY KoalaWndProc(HWND, UINT, WPARAM, LPARAM);
  41.     friend class CMessageFilter;
  42.  
  43.     protected:
  44.         HINSTANCE       m_hInst;            //WinMain parameters
  45.         HINSTANCE       m_hInstPrev;
  46.         LPSTR           m_pszCmdLine;
  47.         UINT            m_nCmdShow;
  48.  
  49.         HWND            m_hWnd;             //Main window handle
  50.  
  51.         BOOL            m_fInitialized;     //Did CoInitialize work?
  52.         LPCLASSFACTORY  m_pIClassFactory;   //Our class factory
  53.         DWORD           m_dwRegCO;          //Registration key
  54.  
  55.         //CHAPTER6MOD
  56.         PCMessageFilter m_pMsgFilter;   //Message filter object
  57.         BOOL            m_fBlock;
  58.         BOOL            m_fDelay;
  59.         //End CHAPTER6MOD
  60.  
  61.     public:
  62.         CApp(HINSTANCE, HINSTANCE, LPSTR, UINT);
  63.         ~CApp(void);
  64.         BOOL Init(void);
  65.     };
  66.  
  67. typedef CApp *PAPP;
  68.  
  69. #define CBWNDEXTRA              sizeof(PAPP)
  70. #define KOALAWL_STRUCTURE       0
  71.  
  72.  
  73. void ObjectDestroyed(void);
  74.  
  75. //CHAPTER6MOD
  76. //MSGFILT.CPP
  77. //Message Filter Object
  78.  
  79. class CMessageFilter : public IMessageFilter
  80.     {
  81.     protected:
  82.         ULONG           m_cRef;      //Object reference count
  83.         PAPP            m_pApp;
  84.  
  85.     public:
  86.         CMessageFilter(PAPP);
  87.         ~CMessageFilter(void);
  88.  
  89.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  90.         STDMETHODIMP_(ULONG) AddRef(void);
  91.         STDMETHODIMP_(ULONG) Release(void);
  92.  
  93.         STDMETHODIMP_(DWORD) HandleInComingCall(DWORD, HTASK
  94.            #ifdef WIN32
  95.             , DWORD, LPINTERFACEINFO);
  96.            #else
  97.             , DWORD, DWORD);
  98.            #endif
  99.         STDMETHODIMP_(DWORD) RetryRejectedCall(HTASK, DWORD, DWORD);
  100.         STDMETHODIMP_(DWORD) MessagePending(HTASK, DWORD, DWORD);
  101.     };
  102. //End CHAPTER6MOD
  103.  
  104.  
  105. //This class factory object creates Koala objects.
  106.  
  107. //CHAPTER6MOD
  108. //EKOALA3.CPP
  109. class CImpIExternalConnection;
  110. typedef class CImpIExternalConnection *PCImpIExternalConnection;
  111. //End CHAPTER6MOD
  112.  
  113. class CKoalaClassFactory : public IClassFactory
  114.     {
  115.     //CHAPTER6MOD
  116.     friend class CImpIExternalConnection;
  117.     //End CHAPTER6MOD
  118.  
  119.     protected:
  120.         ULONG                       m_cRef;
  121.         //CHAPTER6MOD
  122.         PCImpIExternalConnection    m_pImpIExtConn;
  123.         //End CHAPTER6MOD
  124.  
  125.     public:
  126.         CKoalaClassFactory(void);
  127.         ~CKoalaClassFactory(void);
  128.  
  129.         //IUnknown members
  130.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  131.         STDMETHODIMP_(ULONG) AddRef(void);
  132.         STDMETHODIMP_(ULONG) Release(void);
  133.  
  134.         //IClassFactory members
  135.         STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, PPVOID);
  136.         STDMETHODIMP LockServer(BOOL);
  137.     };
  138.  
  139. typedef CKoalaClassFactory *PCKoalaClassFactory;
  140.  
  141.  
  142. //CHAPTER6MOD
  143. class CImpIExternalConnection : public IExternalConnection
  144.     {
  145.     protected:
  146.         ULONG               m_cRef;      //Interface reference count
  147.         PCKoalaClassFactory m_pObj;      //Back pointer to the object
  148.         LPUNKNOWN           m_pUnkOuter; //For delegation
  149.  
  150.         DWORD               m_cStrong;
  151.         DWORD               m_cWeak;
  152.  
  153.     public:
  154.         CImpIExternalConnection(PCKoalaClassFactory, LPUNKNOWN);
  155.         ~CImpIExternalConnection(void);
  156.  
  157.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  158.         STDMETHODIMP_(ULONG) AddRef(void);
  159.         STDMETHODIMP_(ULONG) Release(void);
  160.  
  161.         STDMETHODIMP_(DWORD) AddConnection(DWORD, DWORD);
  162.         STDMETHODIMP_(DWORD) ReleaseConnection(DWORD, DWORD, BOOL);
  163.     };
  164.  
  165. //End CHAPTER6MOD
  166.  
  167. #endif //_EKOALA3_H_
  168.