![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
AntonSaburov |
|
||||||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
JNI - Java Native Interface.
Перевод не даст общей идеи, которая заключается в том, что из JVM можно запустить код, который написан на какой-либо компилируемом языке (например на C) и лежит на диске в виде .dll (для Unix это обычно .so) Достаточно полное описание можно найти здесь Trail: Java Native Interface: Table of Contents А ниже сделан очень простой вариант использования JNI. Итак, что надо: 1. Создаем обычный класс на JAVA, но тот метод, который должен использовать dll описываем как native. Кроме этого используем вызов, который загружает нашу dll.
Теперь компилируем наш пример javac JniTest.java Если ничего страшного не произошло, то по идее мы должны получить файл JniTest.class. Теперь обработаем его утилитой javah. Эта утилита создаст нам .h файл для нашей программы. Важно: надо писать файл без расширения. javah -classpath . JniTest Получаем файл JniTest.h вот такого вида.
Редактировать его уже не надо. Его надо просто включить в наш файл CPP, который показан ниже.
В нем следует обратить внимание на обработку строк. Остальные переменные обычно не так сложны. А тут видим, что надо вытащить строку из Unicode в обычный char. Теперь сделаем dll для нашего проекта. ЛУчше было бы, чтобы в системе уже был прописан путьдо компилятора. JAVA_HOME - это переменная среды, которую я всегда прописываю. Вообще это путь до директории с установленной JAVA - например, C:\j2sdk1.4.2_06. (Думаю, что это понятно) cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -LD JniTest.cpp -FeJniTest.dll cl - это компилятро С++ из Visual C++. Вы можете использовать любой другой компилятор. Тут важно собрать наши искходники на Си для получения DLL. Видно, что результатом компиляции должна быть JniTest.dll. Кстати, для Unix-систем должен быть файл вида libJniTest.so. Вот такая особенность. Нужен префикс lib. Теперь создаем тестовый пример.
Собираем javac -classpath . ShowJniTest.java И запускаем java -classpath . ShowJniTest Должно сработать ![]() |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |