home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / software / pelne / optionp / mts4.cab / TServer_tServer.cpp < prev    next >
C/C++ Source or Header  |  1997-11-14  |  4KB  |  129 lines

  1. // Filename: tServer.cpp
  2. //
  3. // Description:  Implementation of DLL Exports
  4. //
  5. // This file is provided as part of the Microsoft Transaction Server Samples
  6. //
  7. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT 
  8. // WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 
  9. // INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES 
  10. // OF MERCHANTABILITY AND/OR FITNESS FOR A  PARTICULAR 
  11. // PURPOSE.
  12. //
  13. // Copyright (C) 1997 Microsoft Corporation, All rights reserved
  14. //
  15. // Note: Proxy/Stub Information
  16. //        To merge the proxy/stub code into the object DLL, add the file 
  17. //        dlldatax.c to the project.  Make sure precompiled headers 
  18. //        are turned off for this file, and add _MERGE_PROXYSTUB to the 
  19. //        defines for the project.  
  20. //
  21. //        If you are not running WinNT4.0 or Win95 with DCOM, then you
  22. //        need to remove the following define from dlldatax.c
  23. //        #define _WIN32_WINNT 0x0400
  24. //
  25. //        Further, if you are running MIDL without /Oicf switch, you also 
  26. //        need to remove the following define from dlldatax.c.
  27. //        #define USE_STUBLESS_PROXY
  28. //
  29. //        Modify the custom build rule for tServer.idl by adding the following 
  30. //        files to the Outputs.
  31. //            tServer_p.c
  32. //            dlldata.c
  33. //        To build a separate proxy/stub DLL, 
  34. //        run nmake -f tServerps.mk in the project directory.
  35.  
  36. #include "stdafx.h"
  37. #include "resource.h"
  38. #include "initguid.h"
  39. #include "tServer.h"
  40. // #include "dlldatax.h"
  41.  
  42. #include "tServer_i.c"
  43. #include "Computer.h"
  44. #include "Human.h"
  45.  
  46. #ifdef _MERGE_PROXYSTUB
  47. extern "C" HINSTANCE hProxyDll;
  48. #endif
  49.  
  50. CComModule _Module;
  51.  
  52. BEGIN_OBJECT_MAP(ObjectMap)
  53.     OBJECT_ENTRY(CLSID_Human, CHuman)
  54.     OBJECT_ENTRY(CLSID_Computer, CComputer)
  55. END_OBJECT_MAP()
  56.  
  57. /////////////////////////////////////////////////////////////////////////////
  58. // DLL Entry Point
  59.  
  60. extern "C"
  61. BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
  62. {
  63.     lpReserved;
  64. #ifdef _MERGE_PROXYSTUB
  65.     if (!PrxDllMain(hInstance, dwReason, lpReserved))
  66.         return FALSE;
  67. #endif
  68.     if (dwReason == DLL_PROCESS_ATTACH)
  69.     {
  70.         _Module.Init(ObjectMap, hInstance);
  71.         DisableThreadLibraryCalls(hInstance);
  72.     }
  73.     else if (dwReason == DLL_PROCESS_DETACH)
  74.         _Module.Term();
  75.     return TRUE;    // ok
  76. }
  77.  
  78. /////////////////////////////////////////////////////////////////////////////
  79. // Used to determine whether the DLL can be unloaded by OLE
  80.  
  81. STDAPI DllCanUnloadNow(void)
  82. {
  83. #ifdef _MERGE_PROXYSTUB
  84.     if (PrxDllCanUnloadNow() != S_OK)
  85.         return S_FALSE;
  86. #endif
  87.     return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
  88. }
  89.  
  90. /////////////////////////////////////////////////////////////////////////////
  91. // Returns a class factory to create an object of the requested type
  92.  
  93. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  94. {
  95. #ifdef _MERGE_PROXYSTUB
  96.     if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
  97.         return S_OK;
  98. #endif
  99.     return _Module.GetClassObject(rclsid, riid, ppv);
  100. }
  101.  
  102. /////////////////////////////////////////////////////////////////////////////
  103. // DllRegisterServer - Adds entries to the system registry
  104.  
  105. STDAPI DllRegisterServer(void)
  106. {
  107. #ifdef _MERGE_PROXYSTUB
  108.     HRESULT hRes = PrxDllRegisterServer();
  109.     if (FAILED(hRes))
  110.         return hRes;
  111. #endif
  112.     // registers object, typelib and all interfaces in typelib
  113.     return _Module.RegisterServer(TRUE);
  114. }
  115.  
  116. /////////////////////////////////////////////////////////////////////////////
  117. // DllUnregisterServer - Removes entries from the system registry
  118.  
  119. STDAPI DllUnregisterServer(void)
  120. {
  121. #ifdef _MERGE_PROXYSTUB
  122.     PrxDllUnregisterServer();
  123. #endif
  124.     _Module.UnregisterServer();
  125.     return S_OK;
  126. }
  127.  
  128.  
  129.