JNI



Поддержка JavaScript отключена

SBP-Program
На главную -> Java &nbsp

&nbsp

Технология JNI позволяет из программы на Java обратиться к программе на C/C++ и наоборот.

Рассмотрим пример вызова функций в программе на С++ из программы на Java. Сначала сделаем простое приложение на Java.

Строим приложение: имя приложения JNI_App, главный класс — JNI_App_Class:

здесь метод fromDLL отмечен как native, этот метод будет реализован на C++.

В строке

app.fromDLL(«Java»);

мы из нашего приложения на Java обращаемся к программе на C++.

Прежде чем заняться реализацией метода fromDLL на C++ создадим заголовочный файл. Для этого используем утилиту javah из папки bin Java каталога.

Схема такова:

javah -jni JNI_App_Class

здесь утилита javah работает с нашим классом JNI_App_Class.class.

Если запустить на выполнение схему, то получим ошибку. Схему в реальном случае надо доработать, указав путь к классу, т.е. classpath. На моём компьютере этот класс находится в D:MySiteJavaCodeJNI_Appbuildclasses. Указав путь к классу JNI_App_Class.class, получаем:

javah -classpath .;D:MySiteJavaCodeJNI_Appbuildclasses -jni pack.JNI_App_Class

Ещё одно обстоятельство: заголовочный файл jni_md из C:Program FilesJavajdk1.6.0_16includewin32 копируем в C:Program FilesJavajdk1.6.0_16include, там находится jni.

Запускаем javah и получаем заголовочный файл на C++:

Настал момент создать dll на C++, в которой и будет использован наш заголовочный файл.

Делаем в Visual C++ новый проект: Win32 — > Консольное приложение Win32, имя «JNI_DLL», тип приложения — DLL. Не забудте выбрать «Не использовать предварительно скомпилированные заголовки».

Скопируем в папку этого проекта заготовленный в предыдущем разделе заголовочный файл pack_JNI_App_Class.h и присоединим его к проекту.

Теперь сделаем новый файл pack_JNI_App_Class.cpp, где реализуем функцию fromDLL:

Компилируем наше C++ приложение, получаем длл — JNI_DLL.dll.

Приложение на Java будет искать нашу длл в каталогах, указанных в java.library.path. Чтоб получить список этих каталогов, делаем так:

String path = System.getProperty(«java.library.path»);
System.out.println(path);

Мы можем поместить длл JNI_DLL.dll в любой из этих каталогов и приложение найдёт её там. Но можно изменить java.library.path. Просто добавим к PATH путь к новому каталогу, где и будем хранить наши длл. После изменения PATH надо перезапустить IDE.

Итак, создаём новый каталог MyJNILibrary, добавлянм путь к нему в переменную среды PATH. Копию полученной длл JNI_DLL.dll помещаем в MyJNILibrary.

Теперь всё готово для обращения из приложения на Java к длл на C++. Запускаем java-приложение JNI_App и получаем результат из длл:

retVal = Java and C++

Программирование

&nbsp
&nbsp
&nbsp