=============================================================================== NOTE: Build these projects in the order shown below. =============================================================================== =============================================================================== IDL =============================================================================== This directory contains the interface defintion file for the interfaces that are used in all projects within this subdirectories. IID_IDetails - This interface is used for demonstrating memory management IID_IMemoryManagement - This interface is used to demonstrating performance of inproc and outofproc servers. You need to compile this IDL file using the midl.exe compiler, as follows: midl /Oicf details.idl To obtain the interface marshaling code for all interfaces defined within the details.idl file. To wrap up all this code into a DLL, you need to use nmake.exe, as follows: nmake -f detailsps.mk Once you have detailsps.dll, you must register it as follows: regsrv32.exe detailsps.dll This is required for remote method invocations on custom interfaces. =============================================================================== DetailsEXE (out-of-process component) =============================================================================== This is an outofproc component implements the server side code for the IMemoryManagement and IDetails interfaces. Once this project has been built, you must register it as follows: DetailsEXE.exe -regserver =============================================================================== DetailsDLL (in-process component) =============================================================================== This inproc component implements the server side code for the IMemoryManagement and IDetails interfaces. Once this project has been built, you must register it as follows: regsvr32 DetailsDLL.dll =============================================================================== MemoryClient =============================================================================== This is a client component that uses the DetailsEXE component for memory management testing. To run this component, you must register the DetailsEXE.exe component. =============================================================================== PerformanceClient =============================================================================== This is a client component that uses the DetailsEXE or DetailDLL components for performance testing. To run this component, you must have done the above steps. See Appendix B in the book for the data that I've obtained. To obtain performance results, do the following: 1. Build the DetailsEXE and DetailsDLL components. 2. Register DetailsEXE using the -RegServer command-line option. 3. Register the DetailsDLL component using the regsvr32.exe utility. 4. Build the proxy/stub code, DetailsPS.dll. 5. Register this proxy/stub DLL using the regsvr32.exe utility. 6. Build the DetailsClient client component. 7. Install DetailsEXE on a remote machine and register it. Don’t forget to install and register the proxy/stub code. 8. Use dcomcnfg.exe to set the RemoteServerName entry (on the machine where the DetailsClient component executes) to point to the remote machine (where the remote DetailsEXE component will run). 9. Use regedit.exe to change the ThreadingModel of the CLSID_Details class object to empty (i.e., ThreadingModel="") and execute DetailsClient. The performance output will be saved in a file called perform.log. Observe the performance output. 10. Repeat step 9 for ThreadingModel="Apartment", ThreadingModel="Free", and ThreadingModel="Both". =============================================================================== CustomMarshaling =============================================================================== This directory contains code that demonstrates custom marshaling. See the readme file under this subdirectory for more information.