6 class VXSharedLibrary
{
8 class Error
: public std::runtime_error
{
11 std::runtime_error("VXSharedLibrary::Error")
14 Error(const std::string
& msg
):
15 std::runtime_error(msg
)
18 virtual ~Error() throw()
22 class LoadError
: public VXSharedLibrary::Error
{
24 LoadError(const std::string
& msg
):
25 VXSharedLibrary::Error(msg
.c_str())
30 class SymbolError
: public VXSharedLibrary::Error
{
32 SymbolError(const std::string
& msg
):
33 VXSharedLibrary::Error(msg
.c_str())
38 class CloseError
: public VXSharedLibrary::Error
{
40 CloseError(const std::string
& msg
):
41 VXSharedLibrary::Error(msg
.c_str())
46 class NotOpenError
: public VXSharedLibrary::Error
{
48 NotOpenError(const std::string
& msg
):
49 VXSharedLibrary::Error(msg
.c_str())
55 static VXSharedLibrary
openSelf()
57 VXSharedLibrary
lib(shl_openself());
63 shl_handle_t
* m_handle
;
64 std::string errormessage
;
71 const char* err
= shl_geterrstr(m_handle
);
74 return strerror(errno
);
89 VXSharedLibrary(shl_handle_t
* ctx
)
95 VXSharedLibrary(const std::string
& path
)
104 void open(const std::string
& path
)
107 this->m_handle
= shl_openlib(path
.c_str());
108 if(this->m_handle
== NULL
)
111 throw VXSharedLibrary::LoadError(this->lasterr());
115 void* resolve(const std::string
& funcname
)
118 ptr
= shl_resolve(this->m_handle
, funcname
.c_str());
121 throw VXSharedLibrary::SymbolError(this->lasterr());
126 template<typename func_t
> func_t
resolve(const std::string
& name
)
128 return forcecast
<func_t
>(this->resolve(name
));
133 shl_destroy(this->m_handle
);
138 if(this->m_handle
!= NULL
)
142 shl_closelib(this->m_handle
);
147 shl_destroy(this->m_handle
);
152 shl_destroy(this->m_handle
);