/** * @file kc_dl.c * @brief 動的ライブラリモジュール * @copyright 2003 - 2023 Nomura Kei */ #include <kc_dl.h> /** * 指定された動的ライブラリをオープンします。 * * @param filename 動的ライブラリのファイル名 */ dl_handle_t KcDl_open(const char *filename) { dl_handle_t handle; #if (KC_IS_WINDOWS) handle = LoadLibrary(filename); #else handle = dlopen(filename, RTLD_NOW); #endif return handle; } /** * 動的ライブラリの関数を取得します。 * * @param handle ハンドル * @param symbol 関数のシンボル名 * @return 関数 */ void *KcDl_sym(dl_handle_t handle, const char *symbol) { void *func; #if (KC_IS_WINDOWS) func = (void *)GetProcAddress(handle, symbol); #else func = dlsym(handle, symbol); #endif return func; } /** * 動的ライブラリをクローズします。 * * @param handle クローズするハンドル */ bool KcDl_close(dl_handle_t handle) { #if (KC_IS_WINDOWS) BOOL ret = FreeLibrary(handle); return (bool)ret; #else int ret = dlclose(handle); return (ret == 0); #endif }