//////////////////////////////////////////////////////////////////////////////// // // 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