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

Windows编程

开发平台:

Visual C++

  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. #ifndef _EKOALA3_H_
  15. #define _EKOALA3_H_
  16. //Get the object definitions
  17. #include "koala.h"
  18. //CHAPTER6MOD
  19. #define IDR_MENU            1
  20. #define IDM_CALLBLOCK       100
  21. #define IDM_CALLDELAY       101
  22. //End CHAPTER6MOD
  23. //EKOALA3.CPP
  24. LRESULT APIENTRY KoalaWndProc(HWND, UINT, WPARAM, LPARAM);
  25. //CHAPTER6MOD
  26. class CMessageFilter;
  27. typedef CMessageFilter *PCMessageFilter;
  28. //End CHAPTER6MOD
  29. class CApp
  30.     {
  31.     friend LRESULT APIENTRY KoalaWndProc(HWND, UINT, WPARAM, LPARAM);
  32.     friend class CMessageFilter;
  33.     protected:
  34.         HINSTANCE       m_hInst;            //WinMain parameters
  35.         HINSTANCE       m_hInstPrev;
  36.         LPSTR           m_pszCmdLine;
  37.         UINT            m_nCmdShow;
  38.         HWND            m_hWnd;             //Main window handle
  39.         BOOL            m_fInitialized;     //Did CoInitialize work?
  40.         LPCLASSFACTORY  m_pIClassFactory;   //Our class factory
  41.         DWORD           m_dwRegCO;          //Registration key
  42.         //CHAPTER6MOD
  43.         PCMessageFilter m_pMsgFilter;   //Message filter object
  44.         BOOL            m_fBlock;
  45.         BOOL            m_fDelay;
  46.         //End CHAPTER6MOD
  47.     public:
  48.         CApp(HINSTANCE, HINSTANCE, LPSTR, UINT);
  49.         ~CApp(void);
  50.         BOOL Init(void);
  51.     };
  52. typedef CApp *PAPP;
  53. #define CBWNDEXTRA              sizeof(PAPP)
  54. #define KOALAWL_STRUCTURE       0
  55. void ObjectDestroyed(void);
  56. //CHAPTER6MOD
  57. //MSGFILT.CPP
  58. //Message Filter Object
  59. class CMessageFilter : public IMessageFilter
  60.     {
  61.     protected:
  62.         ULONG           m_cRef;      //Object reference count
  63.         PAPP            m_pApp;
  64.     public:
  65.         CMessageFilter(PAPP);
  66.         ~CMessageFilter(void);
  67.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  68.         STDMETHODIMP_(ULONG) AddRef(void);
  69.         STDMETHODIMP_(ULONG) Release(void);
  70.         STDMETHODIMP_(DWORD) HandleInComingCall(DWORD, HTASK
  71.            #ifdef WIN32
  72.             , DWORD, LPINTERFACEINFO);
  73.            #else
  74.             , DWORD, DWORD);
  75.            #endif
  76.         STDMETHODIMP_(DWORD) RetryRejectedCall(HTASK, DWORD, DWORD);
  77.         STDMETHODIMP_(DWORD) MessagePending(HTASK, DWORD, DWORD);
  78.     };
  79. //End CHAPTER6MOD
  80. //This class factory object creates Koala objects.
  81. //CHAPTER6MOD
  82. //EKOALA3.CPP
  83. class CImpIExternalConnection;
  84. typedef class CImpIExternalConnection *PCImpIExternalConnection;
  85. //End CHAPTER6MOD
  86. class CKoalaClassFactory : public IClassFactory
  87.     {
  88.     //CHAPTER6MOD
  89.     friend class CImpIExternalConnection;
  90.     //End CHAPTER6MOD
  91.     protected:
  92.         ULONG                       m_cRef;
  93.         //CHAPTER6MOD
  94.         PCImpIExternalConnection    m_pImpIExtConn;
  95.         //End CHAPTER6MOD
  96.     public:
  97.         CKoalaClassFactory(void);
  98.         ~CKoalaClassFactory(void);
  99.         //IUnknown members
  100.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  101.         STDMETHODIMP_(ULONG) AddRef(void);
  102.         STDMETHODIMP_(ULONG) Release(void);
  103.         //IClassFactory members
  104.         STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, PPVOID);
  105.         STDMETHODIMP LockServer(BOOL);
  106.     };
  107. typedef CKoalaClassFactory *PCKoalaClassFactory;
  108. //CHAPTER6MOD
  109. class CImpIExternalConnection : public IExternalConnection
  110.     {
  111.     protected:
  112.         ULONG               m_cRef;      //Interface reference count
  113.         PCKoalaClassFactory m_pObj;      //Back pointer to the object
  114.         LPUNKNOWN           m_pUnkOuter; //For delegation
  115.         DWORD               m_cStrong;
  116.         DWORD               m_cWeak;
  117.     public:
  118.         CImpIExternalConnection(PCKoalaClassFactory, LPUNKNOWN);
  119.         ~CImpIExternalConnection(void);
  120.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  121.         STDMETHODIMP_(ULONG) AddRef(void);
  122.         STDMETHODIMP_(ULONG) Release(void);
  123.         STDMETHODIMP_(DWORD) AddConnection(DWORD, DWORD);
  124.         STDMETHODIMP_(DWORD) ReleaseConnection(DWORD, DWORD, BOOL);
  125.     };
  126. //End CHAPTER6MOD
  127. #endif //_EKOALA3_H_