2010-01-14 42 views
7

我維護使用Jacob或Java-COM Bridge的傳統Java應用程序通過MS VBA和MS Word的COM接口進行調用。我一直在尋找來自Sun的com4j,它看起來很有希望。com4j與jacob從Java調用COM方法

對我來說看起來不錯的原因是它使用vtable綁定方法而不是IDispatch。假設所有的COM對象都是我們操作當前的vtable接口的,那麼使用它們來代替IDispatch似乎更清晰。早在COM和CORBA使用熱二元接口技術的日子裏,我似乎記得通過vtable的早期綁定比通過IDispatch的後期綁定提供了更好的性能。

有沒有人從Jacob轉移到com4j?如果是這樣,那麼陷阱和經驗教訓是什麼?

回答

13

我已經在對一個簡單的COM對象進行集成時使用了Jacob和Com4j。主要是因爲雅各泄漏了太多內存,所以我最終選擇了與Com4j。與雅各布相比,我認爲Com4j一旦建立起來就更加直截了當。如果我沒有記錯的話,在進行實際的COM呼叫之前,雅各布需要更多的設置和打字。而在Com4j中,您只需使用提供的工廠。

Com4j一直在爲我們工作,但我們在路上遇到了一些顛簸。首先,生成的接口沒有正確生成,我們需要手動調整它們。我記得的主要問題是我們無法使@ReturnValue註釋正常工作。另外,我們需要手動更正枚舉的@VTID

我們遇到的另一件大事是我們無法使用Holder(out params)類short s。我們最終將Delphi包裝從Integer轉換爲Short,而不是對Com4j進行任何更改。

最後,我記得當我整合時,我對項目狀態有點擔心。似乎沒有定期更新(自上次維護版本發佈後兩年)。

+1

謝謝。我不想在沒有提供細節的情況下進入雅各布記憶漏洞,但我們也看到了它。我想我會用com4j和雅各布做一個示範項目,親身體驗這些差異。 – 2010-01-14 20:41:51

+0

我正在考慮從com4j轉到雅各布,因爲不幸的是,com4j只能用於32位Java而不是64位Java,所以在未來的水中似乎死了。 – 2011-03-02 09:15:00

+0

由於@PaulTaylor com4j的評論更新已經[更新爲64位Java支持](http://kohsuke.org/2012/04/27/com4j-updates/)。 – 2013-03-25 17:04:17

0

雖然這是一個非常古老的問題,但我也推薦新用戶使用Com4j,因爲它更穩定,它有一個活躍的社區,甚至還有一個用於生成Java類的Maven插件。但你也可能想看看「j-interop」。