2010-01-14 5 views
7

zu verwenden Ich pflege eine veraltete Java-Anwendung, die Jacob oder Java-COM Bridge verwendet, um Aufrufe über die COM-Schnittstellen von MS VBA und MS Word zu tätigen. Ich habe mir com4j von Sun angesehen, und es sieht vielversprechend aus.com4j versus jacob, um COM-Methoden von Java

Der Grund, warum es mir gut aussieht, ist, dass es Vtable-Bindung zu Methoden anstelle von IDispatch verwendet. Unter der Annahme, dass alle COM-Objekte die vorhandenen Vtable-Schnittstellen manipulieren, scheint es sauberer zu sein, sie anstelle von IDispatch zu verwenden. In den Tagen, als COM und CORBA die Hot-Binary-Interface-Technologien waren, habe ich mich daran erinnert, dass die frühe Bindung über den vtable eine bessere Leistung als die späte Bindung über IDispatch lieferte.

Hat jemand von Jacob zu com4j migriert? Wenn ja, was waren die Fallstricke und die daraus gezogenen Lehren?

Antwort

13

Ich habe Jacob und Com4j während der Integration gegen ein einfaches COM-Objekt verwendet. Am Ende ging ich mit Com4j, weil Jacob zu viel Speicher verlor. Im Vergleich zu Jacob glaube ich, dass Com4j nach der Einrichtung einfacher war. Wenn ich mich richtig erinnere, brauchte Jacob viel mehr Einrichten und Tippen, bevor er den eigentlichen COM-Aufruf ausführte. Während Sie in Com4j sind, benutzen Sie einfach die mitgelieferte Fabrik.

Com4j hat funktioniert OK für uns, aber wir haben ein paar Beulen auf dem Weg getroffen. Erstens wurden die generierten Interfaces nicht korrekt generiert und wir mussten sie manuell anpassen. Die Hauptprobleme, an die ich mich erinnere, waren, dass wir die @ReturnValue Annotation nicht richtig funktionieren lassen konnten. Außerdem mussten wir die @VTID Enumeration manuell korrigieren.

Eine andere wichtige Sache, der wir gegenüberstanden, war, dass wir die Klasse Holder (out params) für short s nicht verwenden konnten. Am Ende haben wir einen Delphi-Wrapper erstellt, der von Integer in Short konvertiert, anstatt Änderungen an Com4j vorzunehmen.

Schließlich erinnere ich mich, dass ich ein bisschen besorgt über den Projektstatus war, während ich integrierte. Es scheint keine regelmäßigen Updates zu geben (zwei Jahre seit der letzten Wartungsversion).

+1

Danke. Ich wollte nicht in Jacobs Gedächtnisverlust eindringen, ohne Einzelheiten zu nennen, aber wir haben es auch gesehen. Ich denke, ich mache ein Demonstrationsprojekt mit com4j und eins mit Jacob und erlebe die Unterschiede aus erster Hand. –

+0

Im Blick auf den Übergang von com4j zu Jacob, weil leider com4j funktioniert nur mit 32bit Java nicht 64bit Java, so scheint tot im Wasser vorwärts. –

+0

Als Update für den Kommentar von @PaulTaylor wurde com4j seitdem [aktualisiert mit 64-Bit-Java-Unterstützung] (http://kohsuke.org/2012/04/27/com4j-updates/). –

0

Obwohl es eine sehr alte Frage ist, aber ich empfehle auch neue Leute, Com4j zu verwenden, weil es stabiler ist, hat es eine aktive Community und sogar ein Maven-Plug-in zum Generieren Ihrer Java-Klassen. Vielleicht möchten Sie aber auch "j-interop" sehen.