1
0
Files
BasaltMeter/BasaltPresenter/Presenter/dll_loader.cpp
2025-11-27 21:52:40 +08:00

39 lines
1.1 KiB
C++

#include "dll_loader.hpp"
#include <stdexcept>
namespace Basalt::Presenter {
DllLoader::DllLoader(DllKind kind, const std::basic_string_view<BSCHAR> 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