【问题标题】:plug-in architecture based c/c++ application基于插件架构的 c/c++ 应用程序
【发布时间】:2011-02-23 14:38:06
【问题描述】:

我需要知道如何开始编写基于插件架构的应用程序。我的意思是如何编写基本代码并让其他人通过添加他们编写的插件来开发应用程序。 我知道在 C++ 中这样做存在一些问题。大多数人使用另一种语言(例如 python)将插件添加到他们的 c++ 应用程序中。

【问题讨论】:

  • 你的意思是插件应该用c++写吗?
  • 这在某种程度上取决于您所针对的操作系统
  • 是的。但我担心主应用程序和用 c++ 编写的插件之间的二进制兼容性
  • 定义好 stdc++ 库版本和您的目标处理器(x86、arm、x64 等),并且您应该涵盖二进制兼容性。我刚才说的比听起来更难,也比应该的更难。
  • @SepiDev 您是否考虑过简单地用 Python 编写整个应用程序?如今,C++ 能做的事情并没有 Python 做不到。

标签: c++ linux architecture plugins add-in


【解决方案1】:

我认为,这不是您期望的答案,但您可以尝试检查 Rainmeter 来源。它是用 C++ 编写的(在我看来,有些地方可以做得更好,但总的来说还可以),整个应用程序都是这样完成的,所以它只处理插件。

即使是简单的 API 也是通过插件完成的,还有一堆贡献插件的示例,我的意思是,由其他人编写(我也这样做过,一天)。

我认为您实际上可以通过查看其他应用程序来研究基于插件的开发中的许多新技巧。

另外提一下,另一个很好的例子是Miranda IM

编辑:另外,如果我执行相同的任务,我实际上会在我的应用程序中添加一些 python(或类似的东西)后端并将其用作 SDK 的语言(例如, 使用boost::python)。

【讨论】:

  • 如你所说,我需要一些案例来研究,谢谢链接。
  • 虽然python是一个可行的解决方案,并且被广泛用作扩展语言,但我需要拒绝最终应用程序的依赖,
【解决方案2】:

你应该:

  • 定义接口
  • 加载你的插件并给它这个接口

您的插件将能够通过此接口与宿主应用程序通信。这意味着,您必须仔细考虑您希望您的插件做什么。

如果您的主机应用程序发生变化并添加功能,您可能需要支持各种版本的接口。

【讨论】:

    【解决方案3】:

    您能否在应用程序中定义外部应用程序可以与之通信的访问点?

    假设您定义了一些命名管道机制或 TCP/IP 套接字,外部应用程序将在其中调用此 API 来操作您的应用程序?

    鉴于您需要在核心应用程序中注册这些插件,然后才能允许它们使用您的应用程序。您甚至可以添加公有私有证书来验证此插件的来源,(即使用私有密钥对插件进行签名,您的应用程序实例将根据公共密钥进行验证)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2017-01-11
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多