home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / tutsamp / aptserve / aptserve.txt < prev    next >
Text File  |  1997-08-05  |  8KB  |  151 lines

  1.  
  2. APTSERVE - Apartment Model Local Server
  3.  
  4.  
  5. SUMMARY
  6. =======
  7.  
  8. The apartment model is a way of COM programming that associates a single
  9. thread of execution with a family of COM objects in such a way that an
  10. object in the family will be executed only on the thread of its apartment.
  11. When this arrangement is constructed in a server, COM plays a role in
  12. enforcing the single-thread rule for objects in the apartment by ensuring
  13. that client calls on any thread to objects in a server apartment will only
  14. be executed on the thread of the apartment.
  15.  
  16. The APTSERVE sample begins with the car-related COM Objects of the
  17. previous LOCSERVE sample and rehouses them in an out-of-process local
  18. server, APTSERVE.EXE, that uses the apartment threading model. To do so
  19. requires little change to the COM objects themselves (COCar, COUtilityCar,
  20. and COCruiseCar). The COCruiseCar object required some changes. In
  21. LOCSERVE COCruiseCar reused the COCar object using aggregation. Since this
  22. sample rehouses these objects within different apartments, COCruiseCar
  23. must be recoded to reuse COCar using containment. But most importantly,
  24. the server housing must undergo significant revision. This sample
  25. introduces the new facilities to partition each class factory and its
  26. created object instances into a separate apartment.
  27.  
  28. In this sample, an out-of-process COM server is partitioned into three
  29. single-threaded apartments, each corresponding to the component types seen
  30. in previous samples: AptCar, AptUtilityCar, and AptCruiseCar. These
  31. components are known by their CLSIDs as: CLSID_AptCar,
  32. CLSID_AptUtilityCar, and CLSID_AptCruiseCar. Appropriate class factories
  33. for those components are also provided: CFCar, CFUtilityCar, and
  34. CFCruiseCar. As compared to the implementation of these class factories in
  35. previous lessons, no significant change to the class factories themselves
  36. is required in this sample.
  37.  
  38. In the series of COM tutorial code samples, APTSERVE works with the
  39. APTCLIEN code sample to illustrate APTSERVE's partitioning of the server
  40. facilities for creating and manipulating components within separate
  41. apartments and to show how the components are accessed by a client.
  42.  
  43. For functional descriptions and a tutorial code tour of APTSERVE, see the
  44. Code Tour section in APTSERVE.HTM. For details on the programmatic usage
  45. of APTSERVE, see the Usage section in APTSERVE.HTM. To read APTSERVE.HTM,
  46. run TUTORIAL.EXE in the main tutorial directory and click the APTSERVE
  47. lesson in the table of lessons. You can also achieve the same thing by
  48. clicking the APTSERVE.HTM file after locating the main tutorial directory
  49. in the Windows Explorer. See also APTCLIEN.HTM in the main tutorial
  50. directory for more details on the APTCLIEN client application and how it
  51. works with APTSERVE.EXE.
  52.  
  53. You must build APTSERVE.EXE before building or running APTCLIEN. The
  54. accompanying makefile automatically registers APTSERVE components in the
  55. registry. These components must be registered before APTSERVE is available
  56. to outside COM clients as a server for those components. This registration
  57. is done using the REGISTER.EXE utility built in the earlier REGISTER
  58. lesson. To build or run APTSERVE, you should build the REGISTER code
  59. sample first.
  60.  
  61. Like its predecessors, APTSERVE uses many of the utility classes and
  62. services provided by APPUTIL. For more details on APPUTIL, study the
  63. APPUTIL library's source code and APPUTIL.HTM, located in the main
  64. tutorial directory.
  65.  
  66. As an out-of-process local server with apartment threading, APTSERVE
  67. relies on standard marshaling for clients to use its interfaces across
  68. both thread and process boundaries. Such marshaling is provided in the
  69. MARSHAL.DLL server built in the previous lesson. To build or run APTSERVE,
  70. you should build the MARSHAL code sample first.
  71.  
  72. For details on setting up your system to build and test the code samples
  73. in this COM Tutorial series, see TUTORIAL.HTM. The supplied MAKEFILE is
  74. Microsoft NMAKE-compatible. To create a debug build, issue the NMAKE
  75. command in the Command Prompt window.
  76.  
  77. Like the LOCSERVE/LOCCLIEN pair, APTSERVE uses APPUTIL's CSendLog trace
  78. logging facility to allow display of internal APTSERVE behavior integrated
  79. with client behavior in the APTCLIEN log display. See APTCLIEN.HTM for
  80. more details setting up this logging operation. See LOCSERVE.HTM for
  81. details on how CSendLog works.
  82.  
  83. Usage
  84. -----
  85.  
  86. The APTSERVE application is meant to be used as an out-of-process COM
  87. server. Out-of-process servers like APTSERVE are registered in the system
  88. registry, and APTSERVE has built-in support for registering its
  89. components. It accepts the following command line switches to register and
  90. unregister:
  91.  
  92.     -RegServer or /RegServer to register
  93.     -UnregServer or /UnregServer to unregister
  94.  
  95. String matches on these switches are case-insensitive. APTSERVE also
  96. recognizes the standard -Embedding or /Embedding switch, which directs it
  97. to run as an out-of-process server. This switch normally means that the
  98. server will remain hidden when run by COM on behalf of a client. However,
  99. for the tutorial purposes of this sample, APTSERVE can be run visible when
  100. controlled by a client. You can manually direct APTSERVE to run visible by
  101. starting it with an explicit -Embedding switch on its command line prior
  102. to running the APTCLIEN client. If you attempt to run APTSERVE as a
  103. stand-alone application with no command line switches, it will exit with
  104. an error.
  105.  
  106. The makefile that builds this sample automatically registers the server in
  107. the registry. You can manually initiate its self-registration by issuing
  108. the following command at the command prompt in the APTSERVE directory:
  109.  
  110.   nmake register
  111.  
  112. You can also directly invoke the REGISTER.EXE command at the command prompt
  113. while in the APTSERVE directory.
  114.  
  115.   ..\register\register.exe aptserve.exe
  116.  
  117. These registration commands require a prior build of the REGISTER sample
  118. in this series, as well as a prior build of APTSERVE.EXE.
  119.  
  120.  
  121. FILES
  122. =====
  123.  
  124. Files        Description
  125.  
  126. APTSERVE.TXT This file.
  127. MAKEFILE     The generic makefile for building the APTSERVE.EXE
  128.              code sample of this tutorial lesson.
  129. APTSERVE.H   The include file for the APTSERVE application. Contains
  130.              class declarations, function prototypes, and resource
  131.              identifiers.
  132. APTSERVE.CPP The main implementation file for APTSERVE.EXE. Has WinMain
  133.              and CMainWindow implementation, as well as the main menu
  134.              dispatching.
  135. APTSERVE.RC  The resource definition file for the executable.
  136. APTSERVE.ICO The icon resource for the executable.
  137. SERVER.H     The include file for the server control C++ object. Also
  138.              used for APTSERVE externs.
  139. SERVER.CPP   The implementation file for the server control object.
  140.              Manages apartment threads, object counts, server lifetime,
  141.              and the creation of class factories.
  142. FACTORY.H    The include file for the server's class factory COM objects.
  143. FACTORY.CPP  The implementation file for the server's class factories.
  144. CAR.H        The include file for the COCar COM object class.
  145. CAR.CPP      The implementation file for the COCar COM object class.
  146. UTILCAR.H    The include file for the COUtililtyCar COM object class.
  147. UTILCAR.CPP  The implementation file for the COUtilityCar COM object class.
  148. CRUCAR.H     The include file for the COCruiseCar COM object class.
  149. CRUCAR.CPP   The implementation file for the COCruiseCar COM object class.
  150.  
  151.