| Index: installer/src/installer-lib/DLL.h | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/installer/src/installer-lib/DLL.h | 
| @@ -0,0 +1,65 @@ | 
| +/** | 
| + * \file DLL.h The DLL as a Windows system module. | 
| + */ | 
| + | 
| +#ifndef DLL_H | 
| +#define DLL_H | 
| + | 
| +#include <memory> | 
| +#include <string> | 
| + | 
| +#include "windows.h" | 
| + | 
| +/** | 
| + * Singleton representing the DLL module. This class is the source of the file name for the custom action library, used in logging. | 
| + * The choice to use a singleton reflects the design of the Windows API, which treats the module handle as a global for the DLL instance, | 
| + * only appearing during the calls that manage the lifetime of the DLL. | 
| + */ | 
| +class DLL_Module | 
| +{ | 
| +public: | 
| +  /** | 
| +   * Accessor function for the singleton. | 
| +   */ | 
| +  static DLL_Module & module(); | 
| + | 
| +  /** | 
| +   * Hook function to call on DLL attach. | 
| +   */ | 
| +  static void attach( HINSTANCE handle ); | 
| + | 
| +  /** | 
| +   * Hook function to call on DLL detach. | 
| +   */ | 
| +  static void detach(); | 
| + | 
| +  /** | 
| +   * Textual name of the DLL as an OS module. | 
| +   */ | 
| +  std::wstring name(); | 
| + | 
| +private: | 
| +  /** | 
| +   * The singleton value. | 
| +   */ | 
| +  static std::shared_ptr< DLL_Module > singleton; | 
| + | 
| +  /** | 
| +   * Private constructor ensures use of accessor function only. | 
| +   */ | 
| +  DLL_Module( HINSTANCE handle ); | 
| + | 
| +  /** | 
| +   * Windows handle for the instance of the DLL. | 
| +   */ | 
| +  HINSTANCE handle; | 
| + | 
| +  /** | 
| +   * The text name of the module. | 
| +   * | 
| +   * Implemented as a smart pointer for deferred evaluation of the system call to get the module name. | 
| +   */ | 
| +  std::shared_ptr< std::wstring > _name; | 
| +}; | 
| + | 
| +#endif | 
|  |