我正在开发一个软件,它的核心,插件和图形用户界面模块分离。我按需动态加载模块。
我需要确定哪种类型的内部通信最适合以这种方式模块化的软件,以便不同的部分可以交换事件和信息,考虑到使用不同工具包的插件或GUI最终将由第三方开发。
现在,我已经考虑简单地从共享对象加载符号,并在知道它们的类型和函数签名的情况下使用它们。我也考虑过使用像DBus这样的进程间通信,但我不确定这是不是太过分了,还是完全没有必要。
目前,跨平台并不是什么大问题,但未来可能会是这样。
一种与另一种的优缺点是什么?有没有其他需要考虑的解决方案,我还没有找到?
发布于 2012-09-24 11:53:43
IPC对于进程内加载的组件来说是过度杀伤力。当调用者和被调用者可以直接共享指针时,所有关于缓冲区大小和复制方向的额外注释都是不必要的。
如果您希望迁移到Windows,请考虑共享库可能具有不同的分配器和不同的类布局。最好的做法是导出一个工厂函数,返回一个指向接口的指针(抽象类只有纯虚拟成员函数,没有数据,数据和实现都在一个子类中),然后让对象释放自身(其中一个虚拟成员函数会销毁它)。
例如,您可以查看COM IUnknown。您不需要复杂的接口查询等,但是使用纯虚函数和引用计数是一种非常灵活、非常可伸缩和非常可移植的模式。
https://stackoverflow.com/questions/12558599
复制相似问题