-
-
Notifications
You must be signed in to change notification settings - Fork 0
API Loader zh
3cxc edited this page Sep 13, 2026
·
1 revision
插件加载与生命周期管理。
public unsafe class PluginLoader
{
public PluginLoader(Action<string> logAction,
HostApiTable apiTable,
Version apiVersion);
public HostApiTable Api { get; }
public Action<string> LogWriter { get; }
public Version CurrentApiVersion { get; }
public bool LoadPlugin(string dllPath);
public void LoadPluginsFromDirectory(string directoryPath);
public void UnloadAll();
}加载单个插件 DLL / SO / DYLIB。
执行步骤:
-
LoadLibrary(Windows)或dlopen(类 Unix) - 读取
GetPluginInfo→PluginInfo - 若插件要求不兼容的 API 版本则拒绝加载
- 读取
OnInit并传入HostApiTable指针调用 - 记录句柄,供
UnloadAll使用
模块句柄会保留至宿主退出。
按编译期平台枚举 *.dll / *.so / *.dylib, 逐个调用 LoadPlugin, 目录不存在时静默返回。
遍历所有已加载插件:
- 若存在
OnStop导出则调用。 -
FreeLibrary/dlclose。
调用后 PluginLoader 已清空,可重复使用。