ShitEngine
1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
PluginManager.h
浏览该文件的文档.
1
#pragma once
2
3
#include <
ShitEngine/Core/Core.h
>
4
#include <
ShitEngine/Reflection/TypeRegistry.h
>
5
6
#include <string>
7
#include <vector>
8
9
namespace
Shit
{
10
20
class
SHIT_API
PluginManager
final {
21
public
:
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
31
~PluginManager
() {
UnloadAll
(); }
32
34
struct
LoadedPlugin
{
35
void
*
handle
=
nullptr
;
36
std::string
name
;
37
std::string
path
;
38
int
abiVersion
= 0;
39
std::string
version
;
40
RegisterTypesFn
registerTypes
=
nullptr
;
41
};
42
45
void
LoadFromConfig
(
const
std::string& configPath);
46
49
void
RegisterAllTypes
();
50
53
static
const
std::string&
GetLastLoadError
();
54
56
void
UnloadAll
();
57
59
const
std::vector<LoadedPlugin>&
GetPlugins
()
const
{
return
m_plugins; }
60
61
private
:
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
Core.h
SHIT_API
#define SHIT_API
定义
Core.h:14
TypeRegistry.h
Shit::PluginManager
动态插件管理器(引擎级共享:Runtime 与编辑器共用)
定义
PluginManager.h:20
Shit::PluginManager::GetNameFn
const char *(*)() GetNameFn
定义
PluginManager.h:27
Shit::PluginManager::UnloadAll
void UnloadAll()
卸载所有插件(FreeLibrary / dlclose)。注意:必须先于引擎销毁执行。
Shit::PluginManager::GetABIVersionFn
int(*)() GetABIVersionFn
插件 C ABI 函数指针类型
定义
PluginManager.h:26
Shit::PluginManager::RegisterTypesFn
void(*)() RegisterTypesFn
定义
PluginManager.h:29
Shit::PluginManager::LoadFromConfig
void LoadFromConfig(const std::string &configPath)
从 JSON 配置文件加载所有插件(config → "plugins": [{"path": ...}])
Shit::PluginManager::RegisterAllTypes
void RegisterAllTypes()
调用所有已加载插件的 RegisterPluginTypes() 必须在 Game::Init() 之后调用(引擎内置类型已注册)
Shit::PluginManager::GetLastLoadError
static const std::string & GetLastLoadError()
最近一次插件加载失败的描述(P33:编辑器据此弹窗提示用户)。 每次 LoadFromConfig 开始时清空;加载成功/未加载任何插件时为空字符串。
Shit::PluginManager::GetPlugins
const std::vector< LoadedPlugin > & GetPlugins() const
获取已加载插件列表
定义
PluginManager.h:59
Shit::PluginManager::kAbiVersion
static constexpr int kAbiVersion
插件 ABI 版本(插件侧通过 GetPluginABIVersion() 返回该常量)
定义
PluginManager.h:23
Shit::PluginManager::GetVersionFn
const char *(*)() GetVersionFn
定义
PluginManager.h:28
Shit::PluginManager::~PluginManager
~PluginManager()
定义
PluginManager.h:31
Shit
定义
AnimationClip.h:12
Shit::PluginManager::LoadedPlugin
已加载的插件信息
定义
PluginManager.h:34
Shit::PluginManager::LoadedPlugin::path
std::string path
DLL 路径
定义
PluginManager.h:37
Shit::PluginManager::LoadedPlugin::registerTypes
RegisterTypesFn registerTypes
注册类型函数
定义
PluginManager.h:40
Shit::PluginManager::LoadedPlugin::version
std::string version
插件版本
定义
PluginManager.h:39
Shit::PluginManager::LoadedPlugin::handle
void * handle
平台句柄 (HMODULE / void*)
定义
PluginManager.h:35
Shit::PluginManager::LoadedPlugin::name
std::string name
插件名称
定义
PluginManager.h:36
Shit::PluginManager::LoadedPlugin::abiVersion
int abiVersion
ABI 版本
定义
PluginManager.h:38
include
ShitEngine
Plugin
PluginManager.h
制作者
1.17.0