Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Delphi访问javajar_Java_Delphi_Jar - Fatal编程技术网

从Delphi访问javajar

从Delphi访问javajar,java,delphi,jar,Java,Delphi,Jar,有一个JavaJAR二进制库,其中描述了一些有用的类/函数(没有什么特别的,只是普通Java-没有JNI)。没有可用的来源 有一项任务是直接从Delphi调用这些函数。怎么做 另外,我对Delphi一无所知,但我对Java了解很多。不,你不可能,要走的路是 一些资源: 在 除非你手头有太多的时间,可以解压JAR文件(它们是ZIP文件),否则用Delphi编写你自己的Java虚拟机,然后从那里开始;-) jar文件是否包含可以从命令行调用的主类?若问题解决了,Delphi可以执行命令行操作

有一个JavaJAR二进制库,其中描述了一些有用的类/函数(没有什么特别的,只是普通Java-没有JNI)。没有可用的来源

有一项任务是直接从Delphi调用这些函数。怎么做


另外,我对Delphi一无所知,但我对Java了解很多。

不,你不可能,要走的路是

一些资源:


除非你手头有太多的时间,可以解压JAR文件(它们是ZIP文件),否则用Delphi编写你自己的Java虚拟机,然后从那里开始;-)

jar文件是否包含可以从命令行调用的主类?若问题解决了,Delphi可以执行命令行操作。如果没有主类,你可以创建一个调用原始jar文件的文件。

如果你反编译二进制文件,并产生某种原始java源代码,那么你可以考虑使用。这应该是可行的,不会有太多麻烦,因为您说过JAR没有什么特别或复杂的地方。

作为一个快速而简单的替代方案,您应该尝试使用Delphi中的低级别、耗时且容易出错的JNI选项

您将使用一个面向对象的API,与JNI相比只需要一小部分代码,并在几小时内解决您的Delphi/Java集成问题,而不是几天、几周(或几个月,取决于用例)

例如,下面是与java.lang.String相对应的Delphi类型的公共声明,其中的代码摘录显示了如何使用它

请随时联系,我们很乐意帮助您

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;

您应该提到JNI,因为这正是您将要使用的。记住,JNI是一条双向的街道。它不仅允许Java代码调用本机代码,还允许本机代码调用Java代码。我不知道这是否可能,但显然它使用的是JNI。谷歌是无所不知的:我更喜欢搜索而不是谷歌:事实上,我有这些jar的来源,因为我是作者。目的是给另一方提供的不是源代码,而是具有所描述的输入/输出的二进制jar。因此,我将立即开发我的罐子的JNI门。太多了@谢谢你抽出时间。根据我的经验,它是不同的;有时谷歌搜索要好得多,有时是SO搜索。两者都试一下是好的。