2011-07-06 151 views
4

我們有兩個代碼庫,一個用C++編寫(MS VS 6),另一個用Java編寫(JDK 6)。 尋找創造性的方式讓兩人互相交談。Java應用程序和C++應用程序集成/通信


更多詳細信息:

兩個應用程序的GUI應用程序。
重大重寫或翻譯不是一種選擇。
通信需要雙向。儘量避免涉及將文件寫入磁盤的任何事情。

到目前爲止考慮的選項有:

  • 零MG
  • RPC
  • CORBA
  • JNI
  • 編譯Java到本機代碼,然後鏈接

本質,除了最後一項之外,這可以歸結爲v之間的選擇在Java應用程序和C++應用程序之間實現進程間通信的各種方法。仍然對其他創意建議開放!

如果您以前曾請與您的建議附和這種企圖,或者類似的東西,總結經驗教訓,需要避免的陷阱,等


有人會毫無疑問的指出短期內,沒有一個正確答案這個問題。我想我會利用SO社區的集體專業知識,並希望得到許多優秀的答案。

+1

在這些情況下,重寫是不可取的,你將不得不編寫JNI膠合代碼,我強烈建議[考慮JNA和編寫JNA膠合代碼](http://stackoverflow.com/問題/ 2241685/java-native-access-doesnt-do-c-right/2242341#2242341),它更簡單,IMO。 –

+0

SOAP呢? – 2011-07-06 01:35:27

+0

@bguiz:你過得怎麼樣?任何建議都有幫助? –

回答

0

不知道有多少數據和要傳輸和通信的數據類型。 但爲了簡化方式,我建議使用基於HTTP協議的XML或Json。

由於這兩個應用程序都有很多庫,您不會花費太多精力來實現和理解。

更多的,如果你有額外的應用程序交談,這並不難,因爲技術。是跨語言的。

糾正我,如果我錯了,

1

嗯,這取決於你想如何緊密地集成這些應用程序是,你怎麼看他們的未來發展。如果你只是想在他們兩個之間進行數據交流(例如,你希望一個能夠打開另一個寫的文件,或者直接從另一個讀取數據流),那麼我認爲protocol buffers是你最好的選擇。如果您希望由其中一個GUI應用程序呈現的窗口實際上嵌入其他GUI應用程序的面板中,那麼您可能需要使用JNI方法。使用JNI方法,您可以使用SWIG來自動執行大量的操作,雖然它有着不可思議的魔力,並帶有一些注意事項(例如,對於函數重載來說效果不佳)。

我強烈建議不要使用CORBA,RMI和類似的遠程過程調用實現,這主要是因爲根據我的經驗,它們往往非常重,並且消耗大量資源。如果你確實想要類似於RMI的東西,我會推薦一些重量更輕的地方,而不是實際的對象(就像RMI的情況一樣)。例如,您可以使用協議緩衝區作爲您的消息格式,然後在普通套接字之間來回地串行化這些緩衝區。

Kit Ho提到XML或JSON,但協議緩衝區比這兩種格式中的任何一種格式都要高效得多,並且還有直接構建到定義語言中的向後兼容性的概念。

+0

這就是DDS的用途(pub/sub) – 2011-07-06 01:36:15

+0

+1對於SWIG,我會看一看 – bguiz

相關問題