#ifndef RADIX_RADIXDL_LIBRARY_HH_ #define RADIX_RADIXDL_LIBRARY_HH_ #if defined(_WIN32) #include #else #include #endif #include #include #include "radixdl/function.hh" #include "radixcore/visibility.hh" namespace radix { class RADIX_PUBLIC DynamicLibrary { public: DynamicLibrary(); virtual ~DynamicLibrary(); bool is_open() const; bool function_exists(const std::string &); bool open(); bool close(); template DLFunction function(const std::string &); void set_lib_name(const std::string &); void addSearchDir(const std::string &); void removeSearchDir(const std::string &); private: std::vector mDirs; std::string mFileName; static const std::vector m_lib_prefixes; static const std::vector m_lib_suffixes; #if defined(_WIN32) HINSTANCE mHandle; #else void *mHandle; #endif }; // class DLibrary template DLFunction DynamicLibrary::function( const std::string &func) { if (mHandle == NULL) { return DLFunction(); } #if defined(_WIN32) return DLFunction( GetProcAddress(mHandle, func.c_str())); #else return DLFunction(dlsym(mHandle, func.c_str())); #endif } } // namespace radix #endif /* RADIX_RADIXDL_LIBRARY_HH_ */