////////////////////////////////////////////////////////////////////////////////
//
// KCPP Dyanmic Loader Header File
// ライブラリの動的ロードを行うモジュール
//
#ifndef KCPP_DL_HPP
#define KCPP_DL_HPP
#include <string>
#include <kcpp.hpp>
#include <kcpp_exception.hpp>
namespace kcpp
{
#if (KCPP_IS_WINDOWS)
typedef HMODULE dl_handle_t;
typedef FARPROC WINAPI dl_func_t;
#else
typedef void* dl_handle_t;
typedef void* dl_func_t;
#endif
/**
* 動的ライブラリのロードエラー発生時に呼び出される例外です。
*/
class DynamicLoadException : public Exception
{
public:
DynamicLoadException() noexcept;
DynamicLoadException(const DynamicLoadException& t) noexcept;
DynamicLoadException(const std::string& msg) noexcept;
virtual ~DynamicLoadException() noexcept;
};
/**
* 動的ライブラリのローダー。
* 動的にライブラリをロードするクラスです。
*
* 使用例
*
* @code
* typedef void (*SampleFp)(void* data, size_t size);
* ...(省略)...
* DynamicLinkingLoader loader("sample.so");
* SampleFp dumpSample = reinterpret_cast<SampleFp>(loader.sym("dumpSample");
* dumpSample(data, sizeof(data));
*/
class DynamicLoader
{
public:
DynamicLoader(const std::string& name);
virtual ~DynamicLoader();
dl_func_t sym(const std::string& symbol);
private:
DynamicLoader() noexcept = delete;
DynamicLoader(const DynamicLoader&) = delete;
DynamicLoader operator=(const DynamicLoader&) = delete;
dl_handle_t handle;
};
}
#endif // KCPP_DL_HPP