ShitEngine 1.4.2
基于 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
53 static const std::string& GetLastLoadError();
54
56 void UnloadAll();
57
59 const std::vector<LoadedPlugin>& GetPlugins() const { return m_plugins; }
60
61private:
63 bool loadPlugin(const std::string& path);
64
66 static void* loadLibrary(const std::string& path);
68 static void* getSymbol(void* handle, const char* name);
70 static void freeLibrary(void* handle);
71
72 std::vector<LoadedPlugin> m_plugins;
73};
74
75} // 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() 之后调用(引擎内置类型已注册)
static const std::string & GetLastLoadError()
最近一次插件加载失败的描述(P33:编辑器据此弹窗提示用户)。 每次 LoadFromConfig 开始时清空;加载成功/未加载任何插件时为空字符串。
const std::vector< LoadedPlugin > & GetPlugins() const
获取已加载插件列表
定义 PluginManager.h:59
static constexpr int kAbiVersion
插件 ABI 版本(插件侧通过 GetPluginABIVersion() 返回该常量)
定义 PluginManager.h:23
const char *(*)() GetVersionFn
定义 PluginManager.h:28
~PluginManager()
定义 PluginManager.h:31
定义 AnimationClip.h:12
已加载的插件信息
定义 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