ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
PluginManager.h
浏览该文件的文档.
1#pragma once
2
5
6#include <string>
7#include <vector>
8
9namespace Shit {
10
21public:
23 static constexpr int kAbiVersion = 2;
24
26 using GetABIVersionFn = int (*)();
27 using GetNameFn = const char* (*)();
28 using GetVersionFn = const char* (*)();
29 using RegisterTypesFn = void (*)();
30
32
34 struct LoadedPlugin {
35 void* handle = nullptr;
36 std::string name;
37 std::string path;
38 int abiVersion = 0;
39 std::string version;
41 };
42
45 void LoadFromConfig(const std::string& configPath);
46
50
52 void UnloadAll();
53
55 const std::vector<LoadedPlugin>& GetPlugins() const { return m_plugins; }
56
57private:
59 bool loadPlugin(const std::string& path);
60
62 static void* loadLibrary(const std::string& path);
64 static void* getSymbol(void* handle, const char* name);
66 static void freeLibrary(void* handle);
67
68 std::vector<LoadedPlugin> m_plugins;
69};
70
71} // namespace Shit
#define SHIT_API
定义 Core.h:14
动态插件管理器(引擎级共享:Runtime 与编辑器共用)
定义 PluginManager.h:20
const char *(*)() GetNameFn
定义 PluginManager.h:27
void UnloadAll()
卸载所有插件(FreeLibrary / dlclose)。注意:必须先于引擎销毁执行。
int(*)() GetABIVersionFn
插件 C ABI 函数指针类型
定义 PluginManager.h:26
void(*)() RegisterTypesFn
定义 PluginManager.h:29
void LoadFromConfig(const std::string &configPath)
从 JSON 配置文件加载所有插件(config → "plugins": [{"path": ...}])
void RegisterAllTypes()
调用所有已加载插件的 RegisterPluginTypes() 必须在 Game::Init() 之后调用(引擎内置类型已注册)
const std::vector< LoadedPlugin > & GetPlugins() const
获取已加载插件列表
定义 PluginManager.h:55
static constexpr int kAbiVersion
插件 ABI 版本(插件侧通过 GetPluginABIVersion() 返回该常量)
定义 PluginManager.h:23
const char *(*)() GetVersionFn
定义 PluginManager.h:28
~PluginManager()
定义 PluginManager.h:31
定义 AudioPlayer.h:10
已加载的插件信息
定义 PluginManager.h:34
std::string path
DLL 路径
定义 PluginManager.h:37
RegisterTypesFn registerTypes
注册类型函数
定义 PluginManager.h:40
std::string version
插件版本
定义 PluginManager.h:39
void * handle
平台句柄 (HMODULE / void*)
定义 PluginManager.h:35
std::string name
插件名称
定义 PluginManager.h:36
int abiVersion
ABI 版本
定义 PluginManager.h:38