2011-11-02 74 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;