ShitEngine
基于 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
52
void
UnloadAll
();
53
55
const
std::vector<LoadedPlugin>&
GetPlugins
()
const
{
return
m_plugins; }
56
57
private
:
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
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::GetPlugins
const std::vector< LoadedPlugin > & GetPlugins() const
获取已加载插件列表
定义
PluginManager.h:55
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
定义
AudioPlayer.h:10
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