]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/dynamic.h
Comments (lots of)
[user/henk/code/inspircd.git] / include / dynamic.h
index f2efce0f0ffb677a75c98959cdbbc22ee9268b2b..db46291c4b888f34acec0d1101ec725431c5383f 100644 (file)
@@ -27,7 +27,7 @@ class InspIRCd;
 /** The DLLManager class is able to load a module file by filename,
  * and locate its init_module symbol.
  */
-class DLLManager
+class CoreExport DLLManager
 {
  public:
        /** This constructor loads the module using dlopen()
@@ -38,31 +38,24 @@ class DLLManager
        DLLManager(InspIRCd* ServerInstance, const char *fname);
        virtual ~DLLManager();
 
-
-#ifdef STATIC_LINK
-       /** Get a symbol using static linking.
-        * @param v A static function pointer, pointing at an init_module function
-        * @param sym_name The symbol name to find, usually "init_module"
-        * @return True if the symbol can be found
-        */
-       bool GetSymbol(initfunc* &v, const char *sym_name);
-#else
        /** Get a symbol using dynamic linking.
         * @param v A function pointer, pointing at an init_module function
         * @param sym_name The symbol name to find, usually "init_module"
         * @return true if the symbol can be found, also the symbol will be put into v.
         */
        bool GetSymbol(void **v, const char *sym_name);
-#endif
+
        /** Get the last error from dlopen() or dlsym().
-        * @return The last error string, or NULL if no error has occured
+        * @return The last error string, or NULL if no error has occured.
         */
        char* LastError() 
        {
                 return err;
        }
 
-       /** The module handle
+       /** The module handle.
+        * This is OS dependent, on POSIX platforms it is a pointer to a function
+        * pointer (yes, really!) and on windows it is a library handle.
         */
        void *h;
 
@@ -71,18 +64,12 @@ class DLLManager
        /** The last error string, or NULL
         */
        char *err;
-#ifdef STATIC_LINK
-
-       /** The module name
-        */
-       char staticname[1024];
-#endif
 };
 
 /** This class is a specialized form of DLLManager designed to load InspIRCd modules.
  * It's job is to call the init_module function and receive a factory pointer.
  */
-class DLLFactoryBase : public DLLManager
+class CoreExport DLLFactoryBase : public DLLManager
 {
  public:
        /** Default constructor.
@@ -92,18 +79,13 @@ class DLLFactoryBase : public DLLManager
         */
        DLLFactoryBase(InspIRCd* Instance, const char *fname, const char *func_name = 0);
 
-       /** Default destructor
+       /** Default destructor.
         */
        virtual ~DLLFactoryBase();
-#ifdef STATIC_LINK
-       /** A function pointer to the factory function
-        */
-       initfunc *factory_func;
-#else
-       /** A function pointer to the factory function
+
+       /** A function pointer to the factory function.
         */
        void * (*factory_func)(void);   
-#endif
 };
 
 /** This is the highest-level class of the DLLFactory system used to load InspIRCd modules.
@@ -111,7 +93,7 @@ class DLLFactoryBase : public DLLManager
  * This template is a container for ModuleFactory itself, so that it may 'plug' into ModuleFactory
  * and provide module loading capabilities transparently.
  */
-template <class T> class DLLFactory : public DLLFactoryBase
+template <class T> class CoreExport DLLFactory : public DLLFactoryBase
 {
  public:
        /** Default constructor.
@@ -142,3 +124,4 @@ template <class T> class DLLFactory : public DLLFactoryBase
 };
 
 #endif
+