Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef RVE_DYNLIB_DYNLIB_H
00031 #define RVE_DYNLIB_DYNLIB_H
00032 
00033 #if defined(unix) || defined(__unix__) || defined(__unix)
00034 #include "handle_posix.h"
00035 #elif defined(WIN32)
00036 #error("Windows not supported yet")
00037 #else
00038 #error("Unsupported platform")
00039 #endif
00040 
00041 #include <stdexcept>
00042 
00043 namespace rve_dynlib
00044 {
00045 
00046 class LibraryLoadException : public std::runtime_error
00047 {
00048 public:
00049   LibraryLoadException(const std::string& lib_name, const std::string& error)
00050   : std::runtime_error("Failed to load library [" + lib_name + "]: " + error)
00051   {}
00052 };
00053 
00054 class LibraryUnloadException : public std::runtime_error
00055 {
00056 public:
00057   LibraryUnloadException(const std::string& error)
00058   : std::runtime_error("Failed to unload library : " + error)
00059   {}
00060 };
00061 
00062 Handle load(const char* path);
00063 inline Handle load(const std::string& path)
00064 {
00065   return load(path.c_str());
00066 }
00067 
00068 void unload(Handle& h);
00069 
00070 
00071 bool hasSymbol(Handle h, const char* symbol);
00072 inline bool hasSymbol(Handle h, const std::string& symbol)
00073 {
00074   return hasSymbol(h, symbol.c_str());
00075 }
00076 
00077 void* getSymbol(Handle h, const char* symbol);
00078 inline void* getSymbol(Handle h, const std::string& symbol)
00079 {
00080   return getSymbol(h, symbol.c_str());
00081 }
00082 
00083 const char* prefix();
00084 const char* suffix();
00085 
00086 }
00087 
00088 #endif // RVE_DYNLIB_DYNLIB_H