1#ifndef NEFORCE_PLUGIN_DYNAMIC_LIBRARY_HPP__
2#define NEFORCE_PLUGIN_DYNAMIC_LIBRARY_HPP__
12NEFORCE_BEGIN_NAMESPACE__
24struct dynamic_library_exception final : system_exception {
25 explicit dynamic_library_exception(
const char* info =
"Dynamic Library Operation Failed.",
26 const char*
type = static_type,
const int code = 0) noexcept :
27 system_exception(info,
type,
code) {}
29 explicit dynamic_library_exception(
const exception& e) :
30 system_exception(e) {}
32 ~dynamic_library_exception()
override =
default;
33 static constexpr auto static_type =
"dynamic_library_exception";
100 template <
typename T>
124 NEFORCE_NODISCARD
bool is_open() const noexcept {
return handle_ !=
nullptr; }
141 NEFORCE_NODISCARD
const string&
path() const noexcept {
return path_; }
146NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD bool has_symbol(const string &name) const noexcept
检查符号是否存在
NEFORCE_NODISCARD void * symbol(const string &name) const
获取原始符号地址
dynamic_library(string pth)
构造函数,打开指定的动态库
NEFORCE_NODISCARD bool is_open() const noexcept
检查动态库是否已加载
T to_symbol(const string &name) const
获取符号
NEFORCE_NODISCARD void * native_handle() const noexcept
获取原生句柄
NEFORCE_NODISCARD const string & path() const noexcept
获取库文件路径
dynamic_library & operator=(dynamic_library &&other) noexcept
移动赋值运算符
dynamic_library(dynamic_library &&other) noexcept
移动构造函数
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型