通过插件扩展
在最常见的场景下,同样是动态库,插件并不是在构建时链接的而是在运行时发现并加载的。因此,用户可以利用定义好的插件API来编写自己的插件,这样以来就能以指定方式扩展API的功能。

插件也可以使用静态库,比如在嵌入式系统中,所有插件都是在编译时静态链接到应用程序中的。
动态库插件而言,确保一下两点:
-
插件要能在运行时找到
- 插件应该使用主程序相同的构建环境(不是必要条件)
动态库插件的设计方式为用户提供了运行时加入新插件的能力,但是面临挑战最大。
插件模型
插件模型的应用很广泛。
在API中采用插件模型的优点:
- 更为通用
- 催生社区
- 更新量小
- 面向未来
- 隔离风险
插件系统设计

插件API
要创建插件,用户必须编译并链接插件API。这里将插件API与核心API区分开,后者是个更大规模的代码库,插件系统就是添加在核心API之中的。
插件管理器
这是核心API代码中的一个对象(一般设置为单例),负责管理所有插件的声明周期,即插件的加载、注册和卸载等各个阶段。该对象也叫做插件注册表。
插件系统设计时几个重要的决策
- C还是C++
- 版本控制
- 内部元数据还是外部元数据
- 插件管理器是通用的还是专用的
- 安全性
- 静态库还是动态库
以C++实现插件
DynObj
- http://dynobj.sourceforge.net/
- https://www.codeproject.com/Articles/20648/DynObj-C-Cross-Platform-Plugin-Objects
参考