fix: update dll loader
This commit is contained in:
@@ -13,8 +13,7 @@ namespace Basalt::Presenter {
|
|||||||
#else
|
#else
|
||||||
m_Handle = dlopen(filename.data(), RTLD_LAZY);
|
m_Handle = dlopen(filename.data(), RTLD_LAZY);
|
||||||
#endif
|
#endif
|
||||||
if (!m_Handle)
|
if (!m_Handle) throw std::runtime_error("Can not load given dynamic library.");
|
||||||
throw std::runtime_error("can not load given dynamic library.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DllLoader::~DllLoader() {
|
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
|
} // namespace Basalt::Presenter
|
||||||
|
|||||||
@@ -28,19 +28,15 @@ namespace Basalt::Presenter {
|
|||||||
DllLoader(DllKind kind, const std::basic_string_view<BSCHAR> filename);
|
DllLoader(DllKind kind, const std::basic_string_view<BSCHAR> filename);
|
||||||
~DllLoader();
|
~DllLoader();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void* GetFunctionPointer(const char* name);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T* CreateInstance() {
|
T* CreateInstance() {
|
||||||
if (!m_Handle) return nullptr;
|
|
||||||
|
|
||||||
using Fct = T* (*) ();
|
using Fct = T* (*) ();
|
||||||
constexpr char EXPOSE_FUNC_NAME[] = "BSCreateInstance";
|
constexpr char EXPOSE_FUNC_NAME[] = "BSCreateInstance";
|
||||||
#if defined(BASALT_OS_WINDOWS)
|
auto fct = (Fct) GetFunctionPointer(EXPOSE_FUNC_NAME);
|
||||||
auto fct = (Fct) GetProcAddress(m_Handle, EXPOSE_FUNC_NAME);
|
|
||||||
#else
|
|
||||||
auto fct = (Fct) dlsym(m_Handle, EXPOSE_FUNC_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return fct();
|
return fct();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user