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