説明されているクラス/関数を持つJava jarバイナリライブラリがあります。何も役立たないものは何もありません。利用可能な情報源はありません。DelphiからJava jarへのアクセス
これらの関数をDelphiから直接呼び出すタスクがあります。どうやってするか?
P.S.私はDelphiについて何も知らないが、私はJavaについてたくさん知っている。
説明されているクラス/関数を持つJava jarバイナリライブラリがあります。何も役立たないものは何もありません。利用可能な情報源はありません。DelphiからJava jarへのアクセス
これらの関数をDelphiから直接呼び出すタスクがあります。どうやってするか?
P.S.私はDelphiについて何も知らないが、私はJavaについてたくさん知っている。
いいえ、行く方法がありませんJNIです。あなたはJARを解凍することがあったEKON 11 conference
で
少ないリソースファイル(ZIPファイル)、Delphiで独自のJava VMを作成してそこから移動します;-)
私はGoogleの代わりにSOの検索を好むだろう:http://stackoverflow.com/search?q=%5Bdelphi %5D + jni – splash
私が作者であるので、実際には私はそれらのソースのソースを持っています。目的は別のパーティにソースを与えることではなく、記述された入出力を持つバイナリジャーを与えることでした。だから私はただちにJNIゲートを私の瓶に開発します。どうもありがとう! – barmaley
@splashありがとうございました。私の経験では、それは異なります。時にはGoogleの検索がはるかに良い、時にはSOの検索です。両方を試してみるのは良いことです。 –
jarファイルには、コマンドラインから呼び出せるメインクラスが含まれていますか?問題が解決した場合、Delphiはコマンドライン操作を実行できます。メインクラスがない場合は、元のjarファイルを呼び出すクラスを作成できます。
バイナリファイルを逆コンパイルして、何らかのプリミティブなJavaソースを生成する場合は、Java to Pascal converterを使用することを検討してください。これは、JARが特別なものでも複雑でもないと言って以来、多大な苦労なしに実行可能でなければなりません。
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;
JNIは、まさにあなたが使用するものなので、言いたいことは適切です。 JNIは双方向の通りであることを忘れないでください。 Javaコードでネイティブコードを呼び出すだけでなく、ネイティブコードでJavaコードを呼び出すこともできます。 –
これも可能かどうかはわかりませんでしたが、明らかにJNIを使用しています。 Googleは全知である:http://home.pacifier.com/~mmead/jni/delphi/informant/di200310kw.htm – GolezTrol