home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999.iso / Wtestowe / Vistdstd / Install / Data.Z / Vdllmain.C < prev    next >
C/C++ Source or Header  |  1997-11-11  |  4KB  |  122 lines

  1. /*    VDLLMAIN.C -   DllMain  ||  LibMain + WEP
  2.  *  Copyright (C) 1991-1997 Visio Corporation. All rights reserved.
  3.  *
  4.  *    This file provides implementations for the
  5.  *    basic routines needed by a Windows DLL.
  6.  */
  7.  
  8. #include "vao.h"
  9.  
  10. // DllMain (win32 only) 
  11. //    Standard dll entry point for WIN32 dll. Windows calls DllMain when
  12. //    it loads and unloads a dll. Implementation here does nothing but
  13. //    record handle of dll instance. 
  14. //     
  15. // LibMain (win16 only)
  16. //    Standard dll entry point for WIN16 dll. Windows calls LibMain when
  17. //    it loads dll. Implementation here does standard LibMain stuff and
  18. //    records dll's instance handle.
  19. //
  20. // WEP (win16 only)
  21. //    Standard dll entry point for WIN16 dll. Windows calls WEP when it
  22. //    unloads dll.
  23. //
  24. // Design note:
  25. //    Typically a win16 dll is "multi-instance." If more than one instance
  26. //    of Visio16 is running then all will be interacting with a lone 
  27. //    instance of a win16 VSL. An entirely robust win16 VSL should be
  28. //    designed assuming the possibility that it may need to manage sessions
  29. //    associated with multiple instances of Visio. Typically a win32 dll
  30. //    is "single instance." If many instances of Visio32 are running, then
  31. //    many instances of a win32 VSL will be initiated. The design of a win32
  32. //    VSL needn't take into account the possibility that it has to deal with
  33. //    sessions into more than once instance of Visio. If you want to develop
  34. //    a VSL that can be ported to either win16 or win32, then it's probably
  35. //    best to presume the more general win16 scenario.
  36. //
  37. #if defined(_WIN32)
  38.  
  39.  
  40. BOOL WINAPI DllMain ( HINSTANCE        hModule,
  41.                       DWORD            fdwReason,
  42.                       LPVOID        lpvReserved )
  43.     {
  44.    UNUSED_ARG(lpvReserved);
  45.  
  46.       switch( fdwReason )
  47.         {
  48.         case DLL_PROCESS_ATTACH:
  49.             gbl_hDLLModule = (HINSTANCE)hModule;
  50.             break;
  51.  
  52.         case DLL_PROCESS_DETACH:
  53.         case DLL_THREAD_DETACH:
  54.         case DLL_THREAD_ATTACH:
  55.         default:
  56.             break;
  57.         }
  58.  
  59.     return TRUE;
  60.     }
  61.  
  62. #else /* win16 */
  63.  
  64. // Assign the WEP exit procedure to its own segment as recommended by
  65. // MicroSoft. If library opts to use the WEP() provided by these utilities
  66. // then it should declare WEP_TEXT to be a fixed segment in its .def file,
  67. // e.g.:
  68. //
  69. //        SEGMENTS
  70. //            WEP_TEXT CLASS 'CODE' PRELOAD FIXED
  71. //
  72. int CALLBACK WEP ( int bSystemExit );
  73. #pragma alloc_text (WEP_TEXT,WEP)
  74.  
  75. #ifdef __BORLANDC__
  76. #pragma argsused
  77. #endif
  78. int CALLBACK LibMain (     HINSTANCE    hModule,
  79.                         WORD        wDataSeg,
  80.                         WORD        cbHeapSize,
  81.                         LPSTR        lpNotUsed )
  82.     {
  83.     // This implements a default LibMain() for those dll's that choose
  84.     // to use the dll initialization routine in libentry.obj that comes
  85.     // with the Windows sdk. The LibEntry() routine there calls LibMain()
  86.     // which the lib provides to do specified library initialization.
  87.     //
  88.     // This default implementation simply performs the standard prescribed
  89.     // Windows idioms for library startup.
  90.     //
  91.     // It also stashes the dll's module handle in gbl_hDLLModule for later
  92.     // reference by VLIBUTL_hModule.
  93.     //
  94.     // LibMain() should return a value of 1 if initialization is successful.
  95.  
  96.     if ( !cbHeapSize )
  97.         return 0;
  98.  
  99.     gbl_hDLLModule = hModule;
  100.  
  101.     UnlockData(0);
  102.     return 1;
  103.     }
  104.  
  105. #ifdef __BORLANDC__
  106. #pragma argsused
  107. #endif
  108. int CALLBACK WEP ( int bSystemExit )
  109.     {
  110.     // WEP (Windows Exit Procedure) performs cleanup tasks for this
  111.     // library just before Windows unloads it. WEP() is called automatically
  112.     // by Windows prior to its unloading the library, i.e. after someone
  113.     // has made a call to FreeLibrary() which erases the last pending
  114.     // LoadLibrary() anyone has performed on the library. MicroSoft
  115.     // recommends that a dll have a WEP() function, even if it does
  116.     // nothing but returns success (1), as in this default implementation.
  117.     //
  118.     return(1);
  119.     }
  120.  
  121. #endif /* defined(_WIN32) */
  122.