可移植的C++组件设计

5

过去我一直使用COM和.NET程序集来开发基于组件的系统。现在我要开发一个跨平台的C++项目,也想将代码结构化成组件…

显然,COM和.NET都不是选项,因为COM只在Windows上可用,而程序集会增加对.NET框架的依赖,而目标系统可能没有该框架。

我知道由于ABI差异,我无法在不重新编译的情况下在不同操作系统之间移动组件,但我希望以一种兼容源代码级别的方式编写代码。

是否有任何系统/框架可以在C++中实现这样的架构?


你是否正在寻找跨组件/进程/机器边界的通信? - Jimmy
相关内容:http://stackoverflow.com/questions/1310338/does-any-c-component-framework-beyond-corba-components-exist。 - Emile Cormier
共享组件在不同程序之间是很好的,但并非强制要求。 "远程调用"或语言无关性也不是必须的。 - MFH
1
你需要的是共享库,例如Linux .so/Windows dll,COM的主要优势在于二进制兼容性,这样你就可以从任何地方使用相同的组件,包括不同的编程语言、脚本、浏览器等。你需要这个吗?如果你只是想将系统分解成可重用的、可插拔的部分,那么.so似乎已经足够简单和高效了。 - davka
我有点得出了相同的结论 - 因为我不需要与其他客户端语言进行交互操作 - 我可能会使用普通的DLL和SO...我想我会添加一个类似于COM的简单查找逻辑和类工厂系统来满足我的需求... - MFH
4个回答

2

Mozilla套件使用名为XPCOM的框架。虽然我自己从未使用过它,但它似乎像Microsoft的COM一样可移植。这是我所知道的唯一基于本机代码的进程内组件系统;如果您使用Java,则有OSGi

如今,大多数Unix软件似乎都使用分布式组件模型,其中组件位于不同的进程中。当前流行的系统似乎是DBus;KDE3使用了一种叫做DCOP的替代方案;当然,如果您想选择这种路线,也有好老的CORBA。


感谢输入。实际上,XPCOM 看起来很有趣,但根据维基百科的说法,它受到了大量的编组开销的影响...在决定是否可用之前必须认真研究一下。从头开始构建这样一个 - 非常基本的 - 系统会很有趣,但耗时 :( 我想我不得不研究本地 DLL 和共享对象... - MFH

2

2
如果您可以接受依赖Qt(仅核心库,没有GUI库),您可以查看CTK插件框架。它是基于Apache 2.0许可的动态C++组件系统,其API与OSGi几乎完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接