Index: installer/src/installer-lib/DLL.cpp |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/installer/src/installer-lib/DLL.cpp |
@@ -0,0 +1,57 @@ |
+/** |
+ * \file abp_ca.cpp Top-level source for custom actions. Includes DLL initialization. |
+ */ |
+#include "DLL.h" |
+#include <stdexcept> |
+ |
+std::shared_ptr< DLL_Module > DLL_Module::singleton = 0 ; |
+ |
+DLL_Module & |
+DLL_Module::module() |
+{ |
+ if ( singleton ) |
+ { |
+ return * singleton; |
+ } |
+ throw std::runtime_error( "DLL_Module::module() called when DLL module was not attached." ); |
+} |
+ |
+/** |
+ * The attachment function is the _de facto_ equivalent of initialization. Under ordinary circumstances, this should |
+ * only be called once, and called before everything else. |
+ */ |
+void |
+DLL_Module::attach( HINSTANCE handle ) |
+{ |
+ if ( singleton ) |
+ { |
+ throw std::runtime_error( "May not call DLL_Module::attach() in an attached state." ); |
+ } |
+ singleton = std::shared_ptr< DLL_Module >( new DLL_Module( handle ) ) ; |
+} |
+ |
+/** |
+ * The detachment function is the _de facto_ equivalent of finalization. Under ordinary circumstances, this should |
+ * only be called once, and called after everything else. |
+ */ |
+void |
+DLL_Module::detach() |
+{ |
+ singleton.reset(); |
+} |
+ |
+/** |
+ * Since this class is mostly a replacement for a global variable, it's no surprising the constructor is almost trivial. |
+ */ |
+DLL_Module::DLL_Module( HINSTANCE handle ) |
+ : handle( handle ) |
+{ |
+} |
+ |
+std::wstring |
+DLL_Module::name() |
+{ |
+ if ( _name ) |
+ return *_name ; |
+ throw std::runtime_error( "Not yet implemented" ); |
+} |