Listing 4
// UnixSharedLibrary.cxx #include "SharedLibrary.h" #include <dlfcn.h> class UnixSharedLibrary : public SharedLibrary { public: UnixSharedLibrary(const char* name) throw (SharedLibraryException); ~UnixSharedLibrary(); void* findSymbol(const char* name) throw (SharedLibraryException); private: void* m_handle; }; SharedLibrary* SharedLibrary::openSharedLibrary(const char* name) throw (SharedLibraryException) { return new UnixSharedLibrary(name); } UnixSharedLibrary::UnixSharedLibrary(const char* name) throw (SharedLibraryException) : m_handle(0) { m_handle = dlopen(name,RTLD_NOW|RTLD_GLOBAL); if (m_handle == 0) { const char* s = dlerror(); throw SharedLibraryException(s?s:"Exact Error Not Reported"); } } UnixSharedLibrary::~UnixSharedLibrary() { dlclose(m_handle); } void* UnixSharedLibrary::findSymbol(const char* name) throw (SharedLibraryException) { void* sym = dlsym(m_handle,name); if (sym == 0) throw SharedLibraryException("Symbol Not Found"); else return sym; }