在插件架构模式中,需要动态的插拔软件插件,其本质是动态加载和释放库,本文主要用于支撑插件架构的讲解,因此只介绍C++中动态库的封装与动态加载方法,静态加载不做介绍。
插件的开发需要遵循框架的基本接口,因此,框架提供插件的开发接口,插件根据接口进行动态库的封装,封装后由框架选择性加载,从而做到可插播效果。
(文中的加载库方法用了Qt的QLibrary,window的库函数类似)
1主要内容:
- 封装动态库,通过导出函数,导出封装的类对象;
- 动态加载封装库,不依赖头文件和lib;
- 这里的不依赖头文件是指导出C++基础类,①处代码中返回值类型是已定义的,所以不需要任何头文件;导出非C++基础类,①处的返回值类型无定义,仍然需要知道返回类型的定义。但在框架设计中,该接口类是由框架提供给动态库的,即现有接口类,再有动态库,依赖关系发生反转,仍可理解为不需要头文件。
2注意事项:
1. 导出类对象时,其对象指针必须为纯虚类,想要导出非纯虚类的对象是做不到的;
2. 虚基类的析构函数应声明为虚函数,否则子类对象无法析构;
3封装步骤:
1. 声明需要导出的