Newer
Older
libkc / modules / src / kc_dl.c
/**
 * @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
}