Newer
Older
libkc / modules / src / kc_dl.c
  1. /**
  2. * @file kc_dl.c
  3. * @brief 動的ライブラリモジュール
  4. * @copyright 2003 - 2023 Nomura Kei
  5. */
  6. #include <kc_dl.h>
  7.  
  8. /**
  9. * 指定された動的ライブラリをオープンします。
  10. *
  11. * @param filename 動的ライブラリのファイル名
  12. */
  13. dl_handle_t KcDl_open(const char *filename)
  14. {
  15. dl_handle_t handle;
  16. #if (KC_IS_WINDOWS)
  17. handle = LoadLibrary(filename);
  18. #else
  19. handle = dlopen(filename, RTLD_NOW);
  20. #endif
  21. return handle;
  22. }
  23.  
  24. /**
  25. * 動的ライブラリの関数を取得します。
  26. *
  27. * @param handle ハンドル
  28. * @param symbol 関数のシンボル名
  29. * @return 関数
  30. */
  31. void *KcDl_sym(dl_handle_t handle, const char *symbol)
  32. {
  33. void *func;
  34. #if (KC_IS_WINDOWS)
  35. func = (void *)GetProcAddress(handle, symbol);
  36. #else
  37. func = dlsym(handle, symbol);
  38. #endif
  39. return func;
  40. }
  41.  
  42. /**
  43. * 動的ライブラリをクローズします。
  44. *
  45. * @param handle クローズするハンドル
  46. */
  47. bool KcDl_close(dl_handle_t handle)
  48. {
  49. #if (KC_IS_WINDOWS)
  50. BOOL ret = FreeLibrary(handle);
  51. return (bool)ret;
  52. #else
  53. int ret = dlclose(handle);
  54. return (ret == 0);
  55. #endif
  56. }