c - 公开 API 时的设计方面

标签 c api function-pointers

我正在尝试了解第三方软件中采用的设计策略。具体来说,我正在分析一种情况,其中软件堆栈的“IMP​​LMENTATION_LAYER”(例如)中的代码实现某些功能(通过 C 例程)并将这些例程的签名作为 API 公开给 <强>“应用层”其使用。这是通过以下方式完成的

应用层提供以下结构

struct my_interfaces
{
    /*List of function pointers*/
};

以及基于宏的函数列表,用于初始化此结构(使用合适的函数)并访问此结构的方法。

问题

与传统方法相比,以这种方式公开 API 的优点是什么。我所说的传统方法是指仅公开函数原型(prototype)。

最佳答案

  • 最少 API 导出:您无需导出整个库;只是一个“GetAPI”API。
  • 版本化 API:API 加载器可以得知正在请求哪个“版本”的 API,从而公开特定于特定版本请求的功能和行为
  • 模块化 APIS:API 加载器可以动态加载其他模块,并即时从这些 .so/.dll 文件连接请求的 APIS。
  • 集中许可:单个 API 加载器从根本上减少了需要执行许可代码检查的位置数量。
  • 模式切换:根据请求的 API,可以加载或不加载不同的功能。换句话说,部分 API 人口。一个很好的例子就是进入 FIPS 模式的加密库,其中只有合格算法的特定子集可以访问,而所有其他的都被 stub 为错误条件。

这些只是我脑海中的一些

关于c - 公开 API 时的设计方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13510779/

相关文章:

c - 在数组中搜索特定标记/字符串 C

c - C 中的 fread/fwrite

c - 如何在 OpenGL 中管理缓存纹理?

c - 在C中将函数作为参数传递

c - 从技术上讲,所有函数都可以是 void 函数吗?

api - 通过php中的api在linkedin上共享链接

java - Java中的AES解密花费的时间太长

php - 拉维尔智威汤逊 : generated tokens on the localhost are valid on the server

以函数指针作为参数的 C++ 外部函数,在具有成员函数的类内部使用

c++ - 如何创建一个函数,它以任意函数指针作为参数?