This commit is contained in:
Isuru Samarathunga
2025-11-07 00:16:34 +05:30
parent c1cad88224
commit a7abdbae57

View File

@ -35,12 +35,14 @@ namespace ia
INLINE ~DynamicLib();
INLINE VOID Destroy();
public:
INLINE PVOID GetSymbol(IN CONST String &name);
template<typename FunctionType> FunctionType GetFunction(IN CONST String &name)
{
return reinterpret_cast<FunctionType *>(GetSymbol(name));
return reinterpret_cast<FunctionType>(GetSymbol(name));
}
private:
@ -57,6 +59,10 @@ namespace ia
{
}
DynamicLib::~DynamicLib()
{
}
#if defined(_WIN32)
DynamicLib DynamicLib::Load(IN CONST String &searchPath, IN CONST String &name)
{
@ -66,12 +72,6 @@ namespace ia
return DynamicLib((PVOID) handle);
}
DynamicLib::~DynamicLib()
{
if (m_moduleHandle)
FreeLibrary(static_cast<HMODULE>(m_moduleHandle));
}
PVOID DynamicLib::GetSymbol(IN CONST String &name)
{
const auto symbol = GetProcAddress(static_cast<HMODULE>(m_moduleHandle), name.c_str());
@ -79,6 +79,12 @@ namespace ia
THROW_UNKNOWN("DynamicLib: Failed to find the symbol \"", name, "\" with error: ", GetLastError());
return (PVOID) symbol;
}
VOID DynamicLib::Destroy()
{
if (m_moduleHandle)
FreeLibrary(static_cast<HMODULE>(m_moduleHandle));
}
#else
DynamicLib DynamicLib::Load(IN CONST String &searchPath, IN CONST String &name)
{
@ -89,12 +95,6 @@ namespace ia
return DynamicLib((PVOID) handle);
}
DynamicLib::~DynamicLib()
{
if (m_moduleHandle)
dlclose(m_moduleHandle);
}
PVOID DynamicLib::GetSymbol(IN CONST String &name)
{
dlerror();
@ -102,7 +102,13 @@ namespace ia
const char *dlsym_error = dlerror();
if (dlsym_error)
THROW_UNKNOWN("DynamicLib: Failed to find the symbol \"", name, "\" with error: ", dlerror());
return (PVOID)symbol;
return (PVOID) symbol;
}
VOID DynamicLib::Destroy()
{
if (m_moduleHandle)
dlclose(m_moduleHandle);
}
#endif
} // namespace ia