2009-04-20 45 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上發佈了他們的代碼。