Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: installer/src/installer-lib/DLL.cpp

Issue 22887001: Custom action library, initial version (Closed)
Patch Set: Created Oct. 28, 2013, 9:37 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
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" );
+}

Powered by Google App Engine
This is Rietveld