2011-11-02 75 views
7

有一些Java jar二進制庫,其中描述的類/函數會生成一些有用的東西(沒有什麼特別的只是普通的Java - 沒有JNI)。沒有可用的來源。從Delphi訪問Java jar

有一個任務直接從Delphi中調用這些函數。怎麼做?

P.S.我對Delphi一無所知,但我對Java很瞭解。

+2

您提到JNI是合適的,因爲這正是您將要使用的。請記住,JNI是一條雙向的街道。它不僅允許Java代碼調用本地代碼,還允許本地代碼調用Java代碼。 –

+2

我不知道這是否可能,但顯然它使用的是JNI。谷歌是Omniscient:http://home.pacifier.com/~mmead/jni/delphi/informant/di200310kw.htm – GolezTrol

回答

6

不,你不能走的路是JNI

一些資源:

除非你有你的手太多時間,在這你可以解壓縮JAR文件(它們是ZIP文件),在Delphi中編寫您自己的Java VM並從那裏開始;-)

+0

我希望SO搜索,而不是谷歌:http://stackoverflow.com/search?q=%5Bdelphi %5D + jni – splash

+1

事實上,我確實有這些jar的來源,因爲我是作者。目的是讓另一方不是來源,而只是用描述輸入/輸出的二進制jar。所以我會立即開發JNI門給我的罐子。非常感謝! – barmaley

+0

@splash謝謝你的時間。根據我的經驗,它有所不同;有時谷歌搜索更好,有時搜索。嘗試兩種都很好。 –

1

該jar文件是否包含可以從命令行調用的主類?如果這樣的問題解決了,Delphi可以執行命令行操作。如果沒有主類,則可以創建一個調用原始jar文件的類。

0

如果您反編譯二進制文件並生成某種原始java源,那麼您可以考慮使用Java to Pascal converter。這應該是可行的,因爲你說JAR沒有特別的或複雜的。

1

作爲Delphi選項的低級別,耗時且容易出錯的JNI的替代方案,您應該嘗試Java for Delphi

您將使用面向對象的API,與JNI相比,需要一小部分代碼,並在幾個小時內解決您的Delphi/Java集成問題,而不是幾天,幾周(或幾個月,具體取決於使用情況案件)。

作爲一個例子,下面是對應於java.lang.String的Delphi類型的公共聲明,其中提供了一個代碼解壓縮來展示如何使用它。

不要猶豫,聯繫J4SOFT,很樂意幫助你。

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;