2010-06-08 8 views
10

Ich brauche die Logik in einigen Java-Klassen enthalten. Ich habe JNI gefunden, aber dieses Projekt scheint in letzter Zeit nicht aktualisiert worden zu sein.Mit einer Java-Klasse aus Delphi

Gibt es eine Möglichkeit, es in einer nativen Delphi-Anwendung zu verwenden? Ich benutze Delphi 2009.

+0

Ungefähr wie viel Quellcode? ist die Übersetzung von Java nach Pascal machbar? Wenn ja, könnte es besser sein. –

+0

Es ist für medizinische Imaging-Java-Klassen, ich würde wirklich nicht riskieren, Fehler einzufügen. Sicher wäre Delphi-Klassen die beste Lösung, aber leider nicht. Es gibt DICOM-Delphi-Klassen, aber was ich brauche, ist eine Spezialisierung von ihnen (DICOM-RT), und diese existieren nicht für Delphi (zumindest habe ich keine Implementierung gefunden). – LaBracca

Antwort

4

Eine neuere Lösung als JNI ist JNA, die auch Rückrufe von (Delphi) DLLs unterstützt. Ich fand es einfach zu benutzen.

+1

Unterstützt JNA auch das Aufrufen von Java-Klassen oder das Erlauben von Java, "native dinge" zu konsumieren? – LaBracca

+0

Siehe https://jna.dev.java.net/#callbacks für ein Beispiel, in dem die native DLL eine Methode in der Java-Klasse aufruft, um alle nativen Fenster aufzulisten. Dies könnte erweitert werden, um Methoden zu registrieren, die von der Delphi-DLL zur Kommunikation mit den vorhandenen Java-Klassen verwendet werden können. – mjn

+1

@mjn JNA ist in erster Linie für Java gedacht, um einen systemeigenen Code aufzurufen, und erfordert, dass ein Java-Prozess überhaupt gestartet wird, mit einigen Performance-Fehlern. Laut der OP-Frage ist JNA möglicherweise nicht die beste Wahl. –

-2

Ich bezweifle es sehr. Delphi-Code wird in eine ausführbare Datei kompiliert, während Java-Code von einer virtuellen Maschine ausgeführt wird. Wenn Sie also keine vollständige virtuelle Maschine in Delphi-Code starten, sehe ich keine Möglichkeit, die Logiken einfach einzufügen.

+0

Sie müssen die virtuelle Maschine nur einmal starten und mehrere Aufrufe ausführen. –

3

Sie könnten versuchen j-interop. Die Technik, die ich annehmen sollte, besteht darin, einen COM-Wrapper mit Java-Geschäftslogik zu erstellen und diesen COM-Server aus Delphi-Interoperabilität zu verwenden.

Delphi kann eine Typbibliothek eines COM-Servers erstellen, und Sie können den Com-Server mithilfe dieser Typbibliothek antizipieren. Die Typbibliothek ist einfach ein Wrapper des Servers, der die Schnittstelle für den Delphi-Code freilegt.

Der Schlüssel zur Kommunikation mit verschiedenen Plattformsoftwares heißt "Interoperabilität".

Sie können dies auch in .net versus win32 finden. Tipisch ist Delphi-Code win32 (exe oder dll), und Sie können ein Kommunikationsprotokoll zwischen Delphi-Objekten und .net-Assemblys oder Java-Bytecode mit Interoperabilitätslösungen erstellen.

0

Als Alternative zu Java Native Interface für Delphi (JNI) oder JNA und völlig voreingenommen Antwort ermöglicht Java for Delphi Java und Delphi-Anwendungen auf der objektorientierten Ebene zu interagieren, stark Code eingeben verwenden, in denen Fehler bei detektiert werden können Kompilierzeit statt zur Laufzeit.

+1

Vielen Dank für Ihre Antwort! Bitte lesen Sie die [FAQ zu Eigenwerbung] (http://stackoverflow.com/faq#promotion) sorgfältig durch. Beachten Sie außerdem, dass es erforderlich ist *, dass Sie jedes Mal einen Haftungsausschluss veröffentlichen, wenn Sie auf Ihre eigene Website/Ihr Produkt verlinken. –

Verwandte Themen