为了更好的降低引擎各个模块之间的耦合性,同时可以根据实际需要动态的加载实际需要的模块,引擎中设计了模块管理,具体代码如下,
/// 模块接口,所有模块需要继承
interface Module {
bool OnLoad() // 加载时调用
void OnUnload() // 卸载时调用
};
typedef void (*CREATE_FUNC)(shared_ptr(Module) & ret);
/// 模块管理器
struct ModuleManager {
static shared_ptr(Module) Load(const Identifier & name); // 如果已经加载返回,如果没有,LoadLibraryA加载相应dll,GetProcAddress获取ModuleCreate函数,创建Module插入表中,并调用Module的OnLoad函数
static shared_ptr(Module) Find(const Identifier & name); // 在表中查找对应Module
static void Unload(const Identifier & name); // 从表中删除Module,并调用Module的OnUnload函数
static void StopAll(); // 停止所有Module
HashSet
};
- 本文固定链接: http://www.wy182000.com/2018/09/25/游戏引擎设计系列6-模块管理/
- 转载请注明: wy182000 于 Studio 发表