1
0
Files

54 lines
1.3 KiB
C++
Raw Permalink Normal View History

2026-01-06 16:27:19 +08:00
#include <basalt/char_types.hpp>
2025-11-27 14:15:20 +08:00
#if defined(BASALT_OS_WINDOWS)
#include <Windows.h>
#else
#include <dlfcn.h>
#endif
2026-01-08 19:23:19 +08:00
namespace basalt::presenter::dll_loader {
2025-11-27 14:15:20 +08:00
enum class DllKind {
2026-01-08 19:37:25 +08:00
Engine, ///< Render engine
Deliver, ///< Data deliver
2026-01-04 16:12:36 +08:00
ObjectLoader, ///< 3D object loader
2026-01-08 19:37:25 +08:00
AnimeLoader, ///< Camera animation loader
2025-11-27 14:15:20 +08:00
};
class DllLoader {
public:
#if defined(BASALT_OS_WINDOWS)
using Handle = HMODULE;
#else
2025-11-27 20:48:35 +08:00
using Handle = void*;
2025-11-27 14:15:20 +08:00
#endif
public:
2026-01-08 19:23:19 +08:00
DllLoader(DllKind kind, const shared::char_types::BSStringView& filename);
2025-11-27 14:15:20 +08:00
~DllLoader();
2025-11-27 21:52:40 +08:00
private:
2026-01-08 20:25:33 +08:00
void* get_function_pointer(const char* name);
2025-11-27 21:52:40 +08:00
2025-11-27 20:48:35 +08:00
public:
template<typename T>
2026-01-08 20:25:33 +08:00
T* create_instance() {
2025-11-27 20:48:35 +08:00
using Fct = T* (*) ();
constexpr char EXPOSE_FUNC_NAME[] = "BSCreateInstance";
2026-01-08 20:25:33 +08:00
auto fct = (Fct) get_function_pointer(EXPOSE_FUNC_NAME);
2025-11-27 20:48:35 +08:00
return fct();
}
2026-01-04 23:11:58 +08:00
template<typename T>
2026-01-08 20:25:33 +08:00
void destroy_instance(T* instance) {
2026-01-08 19:37:25 +08:00
using Fct = void (*)(T*);
2026-01-04 23:11:58 +08:00
constexpr char EXPOSE_FUNC_NAME[] = "BSDestroyInstance";
2026-01-08 20:25:33 +08:00
auto fct = (Fct) get_function_pointer(EXPOSE_FUNC_NAME);
2026-01-04 23:11:58 +08:00
fct(instance);
}
2025-11-27 20:48:35 +08:00
2025-11-27 14:15:20 +08:00
private:
Handle m_Handle;
};
2026-01-08 19:37:25 +08:00
} // namespace basalt::presenter::dll_loader