X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fdynamic.h;h=db46291c4b888f34acec0d1101ec725431c5383f;hb=e6d000042ea75d4e0485bec9564b47163a3ca414;hp=d63e5dc83491f63af5f0aa40e8eb1f29e021ef62;hpb=787020a2d719a3becb6bcca1ad6b0df86c528888;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/dynamic.h b/include/dynamic.h index d63e5dc83..db46291c4 100644 --- a/include/dynamic.h +++ b/include/dynamic.h @@ -2,19 +2,15 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. - * E-mail: - * - * - * - * Written by Craig Edwards, Craig McLure, and others. + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * * This program is free but copyrighted software; see * the file COPYING for details. * * --------------------------------------------------- */ - #ifndef __DLL_H #define __DLL_H @@ -31,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() @@ -42,51 +38,38 @@ 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; } - - protected: - /** 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; + protected: + /** 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. @@ -96,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. @@ -115,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 DLLFactory : public DLLFactoryBase +template class CoreExport DLLFactory : public DLLFactoryBase { public: /** Default constructor. @@ -146,3 +124,4 @@ template class DLLFactory : public DLLFactoryBase }; #endif +