《API Design for C++》之通过插件扩展API

本文探讨了动态库插件的概念,它们允许用户在运行时通过插件API扩展软件功能。动态库插件在找到和加载方面需要特别注意,同时讨论了C++中实现插件的优势,如DynObj项目。插件模型带来通用性、社区发展、小更新量、面向未来和风险隔离等好处。设计时需考虑C/C++选择、版本控制、元数据处理、管理器通用性及安全性等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过插件扩展

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

插件库是一个动态库,可以独立于核心API编译,在运行时根据需要显示加载

 插件也可以使用静态库,比如在嵌入式系统中,所有插件都是在编译时静态链接到应用程序中的。

动态库插件而言,确保一下两点:

  • 插件要能在运行时找到

  • 插件应该使用主程序相同的构建环境(不是必要条件)

动态库插件的设计方式为用户提供了运行时加入新插件的能力,但是面临挑战最大。

插件模型

插件模型的应用很广泛。

在API中采用插件模型的优点:

  • 更为通用
  • 催生社区
  • 更新量小
  • 面向未来
  • 隔离风险

插件系统设计

插件管理器存在于核心API之中,负责发现并加载使用插件API构建的插件

插件API

要创建插件,用户必须编译并链接插件API。这里将插件API与核心API区分开,后者是个更大规模的代码库,插件系统就是添加在核心API之中的。

插件管理器

这是核心API代码中的一个对象(一般设置为单例),负责管理所有插件的声明周期,即插件的加载、注册和卸载等各个阶段。该对象也叫做插件注册表。 

插件系统设计时几个重要的决策

  1. C还是C++
  2. 版本控制
  3. 内部元数据还是外部元数据
  4. 插件管理器是通用的还是专用的
  5. 安全性
  6. 静态库还是动态库

以C++实现插件

DynObj

  1. http://dynobj.sourceforge.net/
  2. https://www.codeproject.com/Articles/20648/DynObj-C-Cross-Platform-Plugin-Objects

参考

  1. 《API Design for C++》
  2. C++中插件使用举例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值