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 |