【问题标题】:types of plugin architectures in cc中的插件架构类型
【发布时间】:2011-02-06 18:26:47
【问题描述】:

可以使用 2 种技术 (AFAIK) 在 C 中设计插件:

  1. 一直使用 dlopen():核心代码要求库中的所有函数都具有已知名称和原型。它 dlopen()s 库并通过 dlsym() 获取所有函数指针
  2. 保留一个公开的已知函数,该函数采用由插件实现的函数填充的结构。这个函数是通过 dlsym() 获得的,并在开始时调用一次。

您认为哪种技术更好,为什么?如果有的话,请提及任何其他方法。

【问题讨论】:

  • 这取决于你是否关心便携性。使用dlopen、dlsym 等会限制您使用特定的操作系统子集。您可能需要考虑其他更与平台无关的选项。
  • @Paul R:我很好奇您建议还有哪些与平台无关的解决方案(除了 dlopen/LoadLibrary 的包装器)?
  • @B Mitch:插件架构只是一种约定——应用程序和构成插件的代码块之间的契约——这种架构在 Linux 存在之前就已经存在。
  • @Paul R:我并不反对该架构已经存在了很长时间,我只是好奇它在 C 中存在哪些可移植实现。谢谢。

标签: c architecture plugins


【解决方案1】:

我更喜欢第二种方式,因为它会容易得多:

  • 加载你的插件:它只需要一次调用dlsym,而不是几十次

  • 处理您的插件:您可以使用函数指针传递结构。而是传递数十个函数或在框架中构建这样的结构以便传递它。

请记住,更简单意味着更不容易出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2015-09-06
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2011-05-24
    相关资源
    最近更新 更多