Доступ к Java банке из Delphi - PullRequest
8 голосов
/ 02 ноября 2011

Есть бинарная библиотека Java jar с описанными классами / функциями, делающая некоторые полезные вещи (ничего особенного, просто Java - нет JNI).Нет доступных источников.

Есть задача вызвать эти функции напрямую из Delphi.Как это сделать?

PS Я ничего не знаю о Delphi, но много знаю о Java.

Ответы [ 4 ]

6 голосов
/ 02 ноября 2011

Нет, вы не можете пойти дальше, это JNI .

Несколько ресурсов:

Если у вас нет слишком много времени, в котором вы можете распаковать JAR-файлы (это ZIP-файлы), написать свою собственную Java VM в Delphi и перейти оттуда; -)

1 голос
/ 08 ноября 2011

В качестве быстрой и простой альтернативы низкоуровневому, трудоемкому и подверженному ошибкам JNI из Delphi, вы должны попробовать Java для Delphi .

Вы будете работать с объектно-ориентированным API, вам потребуется часть кода по сравнению с JNI, и вы решите проблему интеграции с Delphi / Java за несколько часов вместо дней, недель (или месяцев, в зависимости от варианта использования). ).

В качестве примера ниже приведено публичное объявление типа Delphi, соответствующего java.lang.String с фрагментом кода, показывающим, как его можно использовать.

Не стесняйтесь обращаться 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;
1 голос
/ 02 ноября 2011

Содержит ли файл jar основной класс, который можно вызвать из командной строки?Если проблема решена, Delphi может выполнять операции командной строки.Если нет основного класса, вы можете создать тот, который вызывает исходный файл JAR.

0 голосов
/ 03 ноября 2011

Если вы декомпилируете бинарный файл и создаете какой-то примитивный источник Java, тогда вы можете рассмотреть возможность использования конвертера Java в Pascal .Это должно быть выполнимо без особых проблем, так как вы сказали, что в JAR нет ничего особенного или сложного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...