#include "dll_loader.hpp" #include namespace Basalt::Presenter { DllLoader::DllLoader(DllKind kind, const std::basic_string_view filename) { // TODO: // Add current executable location supports. // Add sub directories supports. // Fix file name terminal error. #if defined(BASALT_OS_WINDOWS) m_Handle = LoadLibraryW(filename.data()); #else m_Handle = dlopen(filename.data(), RTLD_LAZY); #endif if (!m_Handle) throw std::runtime_error("Can not load given dynamic library."); } DllLoader::~DllLoader() { if (m_Handle) { #if defined(BASALT_OS_WINDOWS) FreeLibrary(m_Handle); #else dlclose(m_Handle); #endif } } void *DllLoader::GetFunctionPointer(const char *name) { if (!m_Handle) throw std::runtime_error("Can not fetch function pointer on not loaded dynamic library."); #if defined(BASALT_OS_WINDOWS) return (void *) GetProcAddress(m_Handle, name); #else return (void *) dlsym(m_Handle, name); #endif } } // namespace Basalt::Presenter