/* +------------------------------------+ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. * E-mail: * * * * Written by Craig Edwards, Craig McLure, and others. * This program is free but copyrighted software; see * the file COPYING for details. * * --------------------------------------------------- */ #ifndef __DLL_H #define __DLL_H typedef void * (initfunc) (void); #include "inspircd_config.h" class DLLManager { public: DLLManager(const char *fname); virtual ~DLLManager(); #ifdef STATIC_LINK bool GetSymbol( initfunc* &v, const char *sym_name ); #else bool GetSymbol( void **, const char *sym_name ); #endif char* LastError() { return err; } protected: void *h; char *err; #ifdef STATIC_LINK char staticname[1024]; #endif }; class DLLFactoryBase : public DLLManager { public: DLLFactoryBase(const char *fname, const char *func_name = 0); virtual ~DLLFactoryBase(); #ifdef STATIC_LINK initfunc *factory_func; #else void * (*factory_func)(void); #endif }; template class DLLFactory : public DLLFactoryBase { public: DLLFactory(const char *fname, const char *func_name=0) : DLLFactoryBase(fname,func_name) { if (factory_func) factory = reinterpret_cast(factory_func()); else factory = reinterpret_cast(-1); } ~DLLFactory() { if (factory) delete factory; } T *factory; }; #endif