Поддержка JavaScript отключена
SBP-Program | |||||
На главную -> Java |   | ||||
  |
Технология 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++
Программирование |
  | |||
 
|
 
|
||||