dynamic_library.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // dynamic_library.cpp
  2. //
  3. #include "dynamic_library.h"
  4. #include <stdarg.h>
  5. #ifdef WIN32
  6. #include <windows.h>
  7. #define CLOSE_LIB(lib) (FreeLibrary((HINSTANCE)lib) != 0)
  8. #define OPEN_LIB(lib) (void*)LoadLibrary(lib)
  9. #define GET_SYM(lib, sn) GetProcAddress((HINSTANCE)lib, sn)
  10. typedef void* (WINAPI*cPtrFuncVarArg)(...);
  11. #else
  12. #include <dlfcn.h>
  13. #define CLOSE_LIB(lib) (::dlclose(lib) == 0)
  14. #define OPEN_LIB(lib) ::dlopen(lib,RTLD_LAZY)
  15. #define GET_SYM(lib, sn) ::dlsym(lib, sn)
  16. typedef void*(*cPtrFuncVarArg)(...);
  17. #endif
  18. DynamicLibrary::DynamicLibrary ()
  19. {
  20. handleLib=0;
  21. }
  22. DynamicLibrary::~ DynamicLibrary ()
  23. {
  24. close();
  25. }
  26. bool DynamicLibrary::open (char const * libname)
  27. {
  28. //should first close the opened library if any
  29. if(handleLib) return false;
  30. handleLib=OPEN_LIB(libname);
  31. return (handleLib != 0);
  32. }
  33. bool DynamicLibrary::close ()
  34. {
  35. if(handleLib)
  36. {
  37. if( CLOSE_LIB(handleLib) )
  38. {
  39. handleLib = 0;
  40. return true;
  41. }
  42. }
  43. return false;
  44. }
  45. void * DynamicLibrary::dlsym (char const * sym_name)
  46. {
  47. if(handleLib) return (void*)GET_SYM(handleLib,sym_name);
  48. else return 0;
  49. }