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

Windows编程

开发平台:

Visual C++

  1. /*+==========================================================================
  2.   File:      SERVER.H
  3.   Summary:   Internal include file for the APTSERVE.EXE local server code
  4.              sample.  Contains class declarations, resource IDs and string
  5.              macros for internal use in constructing this EXE as a local
  6.              COM component server using Apartment model multi-threading.
  7.              Declares the CServer server control object class.
  8.              For a comprehensive tutorial code tour of this module's
  9.              contents and offerings see the tutorial APTSERVE.HTM file.
  10.              For more specific technical details on the internal workings
  11.              see the comments dispersed throughout the module's source code.
  12.   Classes:   CServer.
  13.   Functions: none
  14.   Origin:    3-11-97: atrent - Editor-inheritance from SERVER.H in
  15.                the LOCSERVE Tutorial Code Sample. [Revised]
  16. ----------------------------------------------------------------------------
  17.   This file is part of the Microsoft COM Tutorial Code Samples.
  18.   Copyright (C) Microsoft Corporation, 1997.  All rights reserved.
  19.   This source code is intended only as a supplement to Microsoft
  20.   Development Tools and/or on-line documentation.  See these other
  21.   materials for detailed information regarding Microsoft code samples.
  22.   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  23.   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  24.   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  25.   PARTICULAR PURPOSE.
  26. ==========================================================================+*/
  27. #if !defined(SERVER_H)
  28. #define SERVER_H
  29. #ifdef __cplusplus
  30. // Period to wait for all apartment threads to exit/terminate (8 seconds).
  31. #define LONG_WAIT 8000
  32. // Appartment Thread Initialization data.
  33. enum { NUM_APARTMENTS = 3 };
  34. enum { APTCAR = 0, APTUTILITYCAR = 1, APTCRUISECAR = 2 };
  35. struct APT_INIT_DATA
  36. {
  37.   REFCLSID rclsid;
  38.   IUnknown* pcf;
  39.   // Member initializer MUST be used here because VC++ 4.0+ is strict
  40.   // about const and reference (&) types like REFCLSID that need to
  41.   // be initialized in this app.  For example, VC++ 4.x will not permit
  42.   // a simple assignment of rclsid in the constructor.
  43.   APT_INIT_DATA(REFCLSID rclsidi) : rclsid(rclsidi)
  44.   {
  45.     pcf = NULL;
  46.   };
  47.   ~APT_INIT_DATA() {};
  48. };
  49. /*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
  50.   Class:    CServer
  51.   Summary:  Class to encapsulate control of this COM server (eg, handle
  52.             Lock and Object counting, encapsulate otherwise global data).
  53.             Govern server and Apartment lifetimes.
  54.   Methods:  none
  55. C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/
  56. class CServer : public CThreaded
  57. {
  58.   public:
  59.     CServer(void);
  60.     ~CServer(void);
  61.     void Lock(void);
  62.     void Unlock(void);
  63.     void ObjectsUp(void);
  64.     void ObjectsDown(void);
  65.     BOOL OpenFactories(void);
  66.     BOOL CloseFactories(void);
  67.     // CThreaded method overrides.
  68.     BOOL OwnThis(void);
  69.     void UnOwnThis(void);
  70.     // A place to store the server's instance handle.
  71.     HINSTANCE m_hInstServer;
  72.     // A place to store the server's main window.
  73.     HWND      m_hWndServer;
  74.     // Global Server living Object count.
  75.     LONG      m_cObjects;
  76.     // Global Server Client Lock count.
  77.     LONG      m_cLocks;
  78.     // Some member variables to store pointers to Class Factories.
  79.     IUnknown* m_pCFCar;
  80.     IUnknown* m_pCFUtilityCar;
  81.     IUnknown* m_pCFCruiseCar;
  82.     // Pointers to Apartment init data structures.
  83.     APT_INIT_DATA* m_paiAptCar;
  84.     APT_INIT_DATA* m_paiAptUtilityCar;
  85.     APT_INIT_DATA* m_paiAptCruiseCar;
  86.     // Some member variables to store apartment thread ids.
  87.     DWORD     m_dwAptCar;
  88.     DWORD     m_dwAptUtilityCar;
  89.     DWORD     m_dwAptCruiseCar;
  90.     // An array of handles to the apartment threads.
  91.     HANDLE    m_hApts[NUM_APARTMENTS];
  92. };
  93. #endif // __cplusplus
  94. // Allow other internal APTSERVE modules to get at the globals.
  95. extern CServer*  g_pServer;
  96. extern CSendLog* g_pMsgLog;
  97. #endif // SERVER_H