2009-04-20 46 views
1

我使用的是嵌入式(非Windows)系统,该系统具有有限的C++编译器中的COM接口考虑的,而我用简单的C++寻找一个开源的COM实现,尤其是很少或根本没有使用模板和无使用异常(是的,我知道COM不使用异常,但实现可以在内部使用它们)。什么开源COM实现在嵌入式系统上工作?

在这一点上,我主要寻找所有核心COM类型的C++定义,例如IUnknown,IDispatch,VARIANT等,以及智能指针,BSTR等的一些辅助类。实现QueryInterface和IDispatch的某些级别的支持可能会不错,但我也可以自己做。我想找到一个ITypeInfo实现,并且DCOM的嵌入式实现将很有吸引力。

我知道我可以使用提供与Visual Studio微软的源代码,但我宁愿避免因为在很多的,我不需要定义拉动复杂了,再加上我想避免使用任何可能的法律问题它在非Windows平台上。我对ATL也非常熟悉,由于编译器的限制,我不能使用如此严格的模板化方法。我有很多与COM和DCOM经验,所以我可以写所有的定义和辅助类自己,并在必要时我甚至可以写我自己的DCOM系统。但是我宁愿使用现有的开源实现(如果有的话)。你有什么建议?

回答

1

最近的开源实现,我所知道的是Mozilla的XPCOM(这是不完全一样的微软的COM,但颇为相似)。但我不确定是否可以单独构建它,因为instructions provided现在已经过时了。

1

我建议在看Wine。源代码是在C,不是C++,从而避免任何及所有问题提供完整的C++的支持,C++模板等葡萄酒也有实现了许多(大多数?)的标准接口。

例如,源代码,以LoadTypeLib(它返回一个ITypeInfo实现)是在dlls/oleaut32/typelib.c:383ITypeInfo::AddressOfMember是在typelib.c:6742(在ITypeInfo_fnAddressOfMember)。

(看到COM在C中实现有点奇怪,但是COM定义了一个二进制标准,所以COM组件可以用任何语言实现而不会限制消费语言......)

2

几年前,我正在考虑启动COM/DCOM的FOSS实现,但没有得到任何答案,主要是因为我认为这对开源社区中的任何人都不会有意思。有Software AG的专有实现(称为EntireX DCOM),我认为这对你来说不会有意思。

至于开源项目,除了Mozilla中的Samba和Wine实现以及XPCOM之外,还有OpenCOM。他们在SourceForge上发布了他们的代码。