76 lines
1.3 KiB
C++
Raw Normal View History

2022-02-27 12:53:44 +00:00
#include <STDInclude.hpp>
2017-01-19 22:23:59 +01:00
namespace Utils
{
2021-07-21 18:44:58 +02:00
Library Library::Load(const std::string& name)
2021-07-18 18:11:20 +02:00
{
return Library(LoadLibraryA(name.data()));
}
2021-07-21 18:44:58 +02:00
Library Library::Load(const std::filesystem::path& path)
2021-07-18 18:11:20 +02:00
{
2021-07-21 18:44:58 +02:00
return Library::Load(path.generic_string());
2021-07-18 18:11:20 +02:00
}
2021-07-21 18:44:58 +02:00
Library Library::GetByAddress(void* address)
2021-07-18 18:11:20 +02:00
{
HMODULE handle = nullptr;
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, static_cast<LPCSTR>(address), &handle);
return Library(handle);
}
Library::Library(const std::string& name, bool _freeOnDestroy) : module_(nullptr), freeOnDestroy(_freeOnDestroy)
2017-01-19 22:23:59 +01:00
{
this->module_ = LoadLibraryExA(name.data(), nullptr, 0);
2021-07-18 18:11:20 +02:00
}
Library::Library(const HMODULE handle)
{
this->module_ = handle;
2021-07-18 18:11:20 +02:00
this->freeOnDestroy = true;
}
2017-01-19 22:23:59 +01:00
Library::~Library()
{
2017-03-26 18:00:06 +02:00
if (this->freeOnDestroy)
2017-01-19 22:23:59 +01:00
{
2021-08-19 11:45:40 +02:00
this->free();
2017-01-19 22:23:59 +01:00
}
}
bool Library::operator==(const Library& obj) const
{
return this->module_ == obj.module_;
}
Library::operator bool() const
{
return this->isValid();
}
Library::operator HMODULE() const
{
return this->getModule();
}
2021-08-19 11:45:40 +02:00
bool Library::isValid() const
2017-01-19 22:23:59 +01:00
{
return this->module_ != nullptr;
2017-01-19 22:23:59 +01:00
}
2022-03-20 09:05:45 +00:00
HMODULE Library::getModule() const
2017-01-19 22:23:59 +01:00
{
return this->module_;
2017-01-19 22:23:59 +01:00
}
2017-03-26 18:00:06 +02:00
2021-08-19 11:45:40 +02:00
void Library::free()
2017-03-26 18:00:06 +02:00
{
2021-08-19 11:45:40 +02:00
if (this->isValid())
2017-03-26 18:00:06 +02:00
{
FreeLibrary(this->module_);
2017-03-26 18:00:06 +02:00
}
this->module_ = nullptr;
2017-03-26 18:00:06 +02:00
}
2017-01-19 22:23:59 +01:00
}