2011-11-02 16 views
7

Istnieje biblioteka binarna JAR Java z opisanymi klasami/funkcjami, które tworzą pewne przydatne rzeczy (nic specjalnego, tylko zwykła Java - bez JNI). Brak dostępnych źródeł.Dostęp do Javy Javy z Delphi

Istnieje zadanie wywoływania tych funkcji bezpośrednio z Delphi. Jak to zrobić?

P.S. Nic nie wiem o Delphi, ale wiele wiem o Javie.

+2

Warto wspomnieć o JNI, ponieważ jest to dokładnie to, czego będziesz używać. Pamiętaj, że JNI jest dwukierunkową ulicą. Pozwala nie tylko na kodowanie w języku Java kodu natywnego, ale także umożliwia natywnemu kodowi wywoływanie kodu Java. –

+2

Nie wiedziałem, czy to było nawet możliwe, ale najwyraźniej korzysta z JNI. Google jest wszechwiedzący: http://home.pacifier.com/~mmead/jni/delphi/informant/di200310kw.htm – GolezTrol

Odpowiedz

6

Nie możesz tak pojechać, to JNI.

Kilka zasoby:

Jeśli nie masz zbyt dużo czasu na rękach, w którym można rozpakować plik JAR pliki (są to pliki ZIP), napisz własną Javę VM w Delphi i idź tam ;-)

+0

Preferowałbym wyszukiwanie SO zamiast Google: http://stackoverflow.com/search?q=%5Bdelphi % 5D + jni – splash

+1

W rzeczywistości mam źródła tych słoików, ponieważ jestem autorem. Celem było przekazanie innej stronie nie źródeł, ale tylko binarnego słoika z opisanym wejściem/wyjściem. Tak więc natychmiast opracuję bramkę JNI do mojego słoika. Wielkie dzięki! – barmaley

+0

@splash dzięki za czas. Z mojego doświadczenia wynika, że ​​jest różna; czasami wyszukiwanie google jest znacznie lepsze, czasami wyszukiwanie SO. Dobrze jest spróbować obu. –

1

Czy plik JAR zawiera główną klasę, którą można wywołać z wiersza poleceń? Jeśli tak rozwiązany problem Delphi może wykonywać operacje linii poleceń. Jeśli nie ma głównej klasy, możesz utworzyć taką, która wywoła oryginalny plik jar.

0

Jeśli dekompilujesz plik binarny i stworzysz jakieś pierwotne źródło Java, możesz rozważyć użycie Java to Pascal converter. To powinno być wykonalne bez większych problemów, ponieważ powiedziałeś, że JAR nie jest niczym szczególnym ani skomplikowanym.

1

Jako szybszą i prostszą alternatywę dla niskiego poziomu, czasochłonnego i podatnego na błędy JNI z opcją Delphi, powinieneś wypróbować Java for Delphi.

Będziesz pracował z interfejsem API zorientowanym obiektowo, potrzebowałby ułamka kodu w porównaniu do JNI i rozwiązać problem z integracją Delphi/Java w ciągu kilku godzin zamiast dni, tygodni (lub miesięcy w zależności od użycia walizka).

Jako przykład poniżej znajduje się publiczna deklaracja typu Delphi odpowiadająca java.lang.String z wyciągiem kodu pokazującym, jak można go użyć.

Nie wahaj się skontaktować z J4SOFT, chętnie Ci pomożemy.

Procedure Sample; 
var 
    AJavaString: Ijava_lang_String; 
    AValue: string; 
begin 
    AJavaString := Tjava_lang_String.Create('A value'); 
    AValue := AjavaString.ToString; 
    if AJavaString.StartsWith('A') then 
    ... 
end; 

... 
type 
    Tjava_lang_String = class(Tjava_lang_Object, Ijava_lang_String) 
    public 
    constructor Create; 
    constructor Create(p0: string); 
    constructor Create(p0: Ijava_lang_StringBuffer); 
    constructor Create(p0: Ijava_lang_StringBuilder); 
    constructor Create(p0: TjxByte1DArray); 
    constructor Create(p0: TjxByte1DArray; p1: Longint); 
    constructor Create(p0: TjxByte1DArray; p1: Longint; p2: Longint); 
    constructor Create(p0: TjxByte1DArray; p1: Longint; p2: Longint; p3: Longint); 
    constructor Create(p0: TjxByte1DArray; p1: Longint; p2: Longint; p3: string); 
    constructor Create(p0: TjxByte1DArray; p1: string); 
    constructor Create(p0: TjxChar1DArray); 
    constructor Create(p0: TjxChar1DArray; p1: Longint; p2: Longint); 
    constructor Create(p0: TjxInt1DArray; p1: Longint; p2: Longint); 
    function CharAt(p0: Longint): Char; 
    function CodePointAt(p0: Longint): Longint; 
    function CodePointBefore(p0: Longint): Longint; 
    function CodePointCount(p0: Longint; p1: Longint): Longint; 
    function CompareTo(p0: string): Longint; 
    function CompareToIgnoreCase(p0: string): Longint; 
    function Concat(p0: string): string; 
    function ContentEquals(p0: Ijava_lang_StringBuffer): Boolean; 
    class function CopyValueOf(p0: TjxChar1DArray): string; 
    class function CopyValueOf(p0: TjxChar1DArray; p1: Longint; p2: Longint): string; 
    function EndsWith(p0: string): Boolean; 
    function Equals(p0: Ijava_lang_Object): Boolean; reintroduce; 
    function EqualsIgnoreCase(p0: string): Boolean; 
    class function Format(p0: string; p1: Tjava_lang_Object1DArray): string; 
    function GetBytes: TjxByte1DArray; 
    procedure GetBytes(p0: Longint; p1: Longint; p2: TjxByte1DArray; p3: Longint); 
    function GetBytes(p0: string): TjxByte1DArray; 
    procedure GetChars(p0: Longint; p1: Longint; p2: TjxChar1DArray; p3: Longint); 
    function HashCode: Longint; 
    function IndexOf(p0: Longint): Longint; 
    function IndexOf(p0: Longint; p1: Longint): Longint; 
    function IndexOf(p0: string): Longint; 
    function IndexOf(p0: string; p1: Longint): Longint; 
    function Intern: string; 
    function IsEmpty: Boolean; 
    function LastIndexOf(p0: Longint): Longint; 
    function LastIndexOf(p0: Longint; p1: Longint): Longint; 
    function LastIndexOf(p0: string): Longint; 
    function LastIndexOf(p0: string; p1: Longint): Longint; 
    function Length_: Longint; 
    function Matches(p0: string): Boolean; 
    function OffsetByCodePoints(p0: Longint; p1: Longint): Longint; 
    function RegionMatches(p0: Longint; p1: string; p2: Longint; p3: Longint): Boolean; 
    function RegionMatches(p0: Boolean; p1: Longint; p2: string; p3: Longint; p4: Longint): Boolean; 
    function Replace(p0: Char; p1: Char): string; 
    function ReplaceAll(p0: string; p1: string): string; 
    function ReplaceFirst(p0: string; p1: string): string; 
    function Split(p0: string): TjxString1DArray; 
    function Split(p0: string; p1: Longint): TjxString1DArray; 
    function StartsWith(p0: string): Boolean; 
    function StartsWith(p0: string; p1: Longint): Boolean; 
    function Substring(p0: Longint): string; 
    function Substring(p0: Longint; p1: Longint): string; 
    function ToCharArray: TjxChar1DArray; 
    function ToLowerCase: string; 
    function ToString: string; 
    function ToUpperCase: string; 
    function Trim: string; 
    class function ValueOf(p0: Char): string; 
    class function ValueOf(p0: Double): string; 
    class function ValueOf(p0: Single): string; 
    class function ValueOf(p0: Longint): string; 
    class function ValueOf(p0: Int64): string; 
    class function ValueOf(p0: Ijava_lang_Object): string; 
    class function ValueOf(p0: Boolean): string; 
    class function ValueOf(p0: TjxChar1DArray): string; 
    class function ValueOf(p0: TjxChar1DArray; p1: Longint; p2: Longint): string; 
    property CASE_INSENSITIVE_ORDER; 
    end;