0

我正在开发一个软件,它的核心、插件和 GUI 模块化分离。我按需动态加载模块。

考虑到使用不同工具包的插件或 GUI 最终将由第三方开发,我需要确定哪种类型的相互通信最适合以这种方式模块化的软件,以便不同部分可以交换事件和信息。

现在我考虑简单地从共享对象中加载符号,并在知道它们的类型和函数签名的情况下使用它们。我也考虑过使用像 DBus 这样的 IPC,但我不确定这是否是矫枉过正或完全没有必要。

跨平台现在不是什么大问题,但将来可能会。

一个与另一个的优缺点是什么?还有其他我没有找到的解决方案吗?

4

1 回答 1

1

IPC 对于在进程中加载​​的组件来说太过分了。当调用者和被调用者可以直接共享指针时,所有关于缓冲区大小和复制方向的额外注释都是不必要的。

如果您想迁移到 Windows,请考虑共享库可能具有不同的分配器和不同的类布局。最好的办法是导出一个工厂函数,返回一个指向接口的指针(抽象类只有纯虚成员函数,没有数据,数据和实现都在一个子类中),然后让对象自己释放(其中之一)虚成员函数会破坏它)。

例如,您可以查看 COM IUnknown。您不需要接口查询等所有复杂性,但是使用纯虚函数和引用计数是一种非常灵活、非常可扩展且非常可移植的模式。

于 2012-09-24T03:53:43.407 回答