1
0
Files
BasaltMeter/BasaltPresenter/Presenter/dll_loader.hpp
2026-01-04 16:12:36 +08:00

48 lines
1.0 KiB
C++

#include <basalt_char.hpp>
#include <string_view>
#if defined(BASALT_OS_WINDOWS)
#include <Windows.h>
#else
#include <dlfcn.h>
#endif
namespace Basalt::Presenter {
enum class DllKind {
Engine, ///< Render engine
Deliver, ///< Data deliver
ObjectLoader, ///< 3D object loader
AnimeLoader, ///< Camera animation loader
};
class DllLoader {
public:
#if defined(BASALT_OS_WINDOWS)
using Handle = HMODULE;
#else
using Handle = void*;
#endif
public:
DllLoader(DllKind kind, const std::basic_string_view<BSCHAR> filename);
~DllLoader();
private:
void* GetFunctionPointer(const char* name);
public:
template<typename T>
T* CreateInstance() {
using Fct = T* (*) ();
constexpr char EXPOSE_FUNC_NAME[] = "BSCreateInstance";
auto fct = (Fct) GetFunctionPointer(EXPOSE_FUNC_NAME);
return fct();
}
private:
Handle m_Handle;
};
} // namespace Basalt::Presenter