Использование JNI в Delphi
Приветствую всех. Эта статья рассчитана для Новичков, которые только приступили к изучению JNI для работы с ним в среде Delphi. И так в этой статье мы поговорим как именно использовать JNI в Delphi. И так давайте же приступим.
Для начала вам потребуется компонент JNI. Вы можете его скачать ТУТ. Теперь мы готовы приступить к практической части. Я все буду делать на RAD Studio 10.1 Berlin
Пример №1:
Получаем и изменяем данные типа JInt, JBoolean.
Допустим что у нас есть Класс в котором есть переменная I типа JInt, следовательно нам нужно ее изменить.
public int I = 10;
И есть некий обработчик который использует эту переменную. К примеру Событие нажиния TButton.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println(i);
}
При нажатии на Кнопку в консоль выведется сообщение «10» т.к. I = 10; Чтобы нам изменить I на любое другое число, делаем следующее:
var
JNIEnv: PJNIEnv;
JC: JClass;
JF: JFieldID;
Begin
JC:= jnienv^.FindClass(JNIEnv, 'example/Main');
JF:= jnienv^.GetFieldID(JNIEnv, JC, 'I', 'I');
jnienv^.SetIntField(JNIEnv, JC, JF, 5);
end;
Что же тут происходит. Для начала мы получаем JavaClass функцией FindClass. 'example/Main' это значит что класс находится внутри JVM по пути exampleMain.class.
Далее мы получаем JField в данном случае это I типа JInt. GetFieldID мы указываем Класс, Имя и Сигнатуру.
И наконец мы передаем свое значение I, в моем случаем оно равно 5. SetIntField мы указываем Класс, JField и значение.
То же самое будет для JBoolean:
public boolean Stat = false;
var
JNIEnv: PJNIEnv;
JC: JClass;
JF: JFieldID;
Begin
JC:= jnienv^.FindClass(JNIEnv, 'example/Main');
JF:= jnienv^.GetFieldID(JNIEnv, JC, 'Stat', 'Z');
jnienv^.SetByteField(JNIEnv, JC, JF, 1);
end;
Изначально Stat был равен false т.е. 0, а мы его меняем на true т.е. 1;
Читать полностью »