diff --git a/BasaltPresenter/Presenter/dll_loader.cpp b/BasaltPresenter/Presenter/dll_loader.cpp index 7d85d3e..a92c858 100644 --- a/BasaltPresenter/Presenter/dll_loader.cpp +++ b/BasaltPresenter/Presenter/dll_loader.cpp @@ -13,8 +13,7 @@ namespace Basalt::Presenter { #else m_Handle = dlopen(filename.data(), RTLD_LAZY); #endif - if (!m_Handle) - throw std::runtime_error("can not load given dynamic library."); + if (!m_Handle) throw std::runtime_error("Can not load given dynamic library."); } DllLoader::~DllLoader() { @@ -27,4 +26,13 @@ namespace Basalt::Presenter { } } + 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 diff --git a/BasaltPresenter/Presenter/dll_loader.hpp b/BasaltPresenter/Presenter/dll_loader.hpp index b89212b..d012119 100644 --- a/BasaltPresenter/Presenter/dll_loader.hpp +++ b/BasaltPresenter/Presenter/dll_loader.hpp @@ -28,19 +28,15 @@ namespace Basalt::Presenter { DllLoader(DllKind kind, const std::basic_string_view filename); ~DllLoader(); + private: + void* GetFunctionPointer(const char* name); + public: template T* CreateInstance() { - if (!m_Handle) return nullptr; - using Fct = T* (*) (); constexpr char EXPOSE_FUNC_NAME[] = "BSCreateInstance"; -#if defined(BASALT_OS_WINDOWS) - auto fct = (Fct) GetProcAddress(m_Handle, EXPOSE_FUNC_NAME); -#else - auto fct = (Fct) dlsym(m_Handle, EXPOSE_FUNC_NAME); -#endif - + auto fct = (Fct) GetFunctionPointer(EXPOSE_FUNC_NAME); return fct(); }