dynamic_library.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. #ifdef _WIN32_WCE
  9. #define OPEN_LIB(lib) (void*)LoadLibraryA(lib)
  10. #define GET_SYM(lib, sn) GetProcAddressA((HINSTANCE)lib, sn)
  11. #else
  12. #define OPEN_LIB(lib) (void*)LoadLibrary(lib)
  13. #define GET_SYM(lib, sn) GetProcAddress((HINSTANCE)lib, sn)
  14. #endif
  15. typedef void* (WINAPI*cPtrFuncVarArg)(...);
  16. #else
  17. #include <dlfcn.h>
  18. #define CLOSE_LIB(lib) (::dlclose(lib) == 0)
  19. #define OPEN_LIB(lib) ::dlopen(lib,RTLD_LAZY)
  20. #define GET_SYM(lib, sn) ::dlsym(lib, sn)
  21. typedef void*(*cPtrFuncVarArg)(...);
  22. #endif
  23. DynamicLibrary::DynamicLibrary ()
  24. {
  25. handleLib=0;
  26. }
  27. DynamicLibrary::~ DynamicLibrary ()
  28. {
  29. close();
  30. }
  31. bool DynamicLibrary::open (char const * libname)
  32. {
  33. //should first close the opened library if any
  34. if(handleLib) return false;
  35. handleLib=OPEN_LIB(libname);
  36. return (handleLib != 0);
  37. }
  38. bool DynamicLibrary::close ()
  39. {
  40. if(handleLib)
  41. {
  42. if( CLOSE_LIB(handleLib) )
  43. {
  44. handleLib = 0;
  45. return true;
  46. }
  47. }
  48. return false;
  49. }
  50. void * DynamicLibrary::dlsym (char const * sym_name)
  51. {
  52. if(handleLib) return (void*)GET_SYM(handleLib,sym_name);
  53. else return 0;
  54. }