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