JNA, использование собственного кода с Java, демонстрация
Чтобы использовать родной код с Java, JNA проще JNI, вот его основная демонстрация...
Java Native Access - расширение Java, позволяющее использовать собственные API за счет динамического включения файлов библиотек, DLL под Windows.
В отличие от JNI, больше не нужно генерировать код для использования нативных функций. Для использования функций C достаточно включить файл, который их определяет, и объявить заголовок этих функций в интерфейсе.
Мы хотим использовать функцию puts языка C, которую предоставляет файл msvcrt.dll под Windows, создаем следующий интерфейс:
package CInterface; import com.sun.jna.Library; public interface CInterface extends Library { public int puts(String str); }
Мы объявили интерфейс CInterface, который является подклассом jna. В этом интерфейсе функции C объявляются в качестве методов. Для использования метода puts достаточно создать экземпляр CInterface.
CInterface demo = (CInterface) Native.loadLibrary(libName, CInterface.class); demo.puts("Hello World!");
Для этого нужны следующие импорт:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
Кроме того, в проект должен быть включен книжный магазин jna.jar.
Полный проект для NetBeans можно загрузить. Он содержит два источника:
- CInterface.java, который объявляет вышеупомянутый интерфейс.
- hello.java, использующий этот интерфейс.
Чтобы выполнить демонстрацию:
- Загрузите и установите NetBeans.
- Download здесь файл проекта, он разрывается в директории jna.
- Загрузить книжный магазин jna.jar на сайте Sun и скопировать его в каталог jna.
- Загрузить проект в NetBeans из этого каталога.
- Добавить jna.jar в список книжных магазинов:
Свойства проекта -> Библиотеки -> Добавить JAR/Folder. - Составьте проект.
Затем введите командную строку:
java -jar /jna/dist/hello.jar "Salut le Monde!"
Ты можешь добавить в интерфейс все необходимые функции, если они присутствуют в одном DLL-файле, и создать интерфейс для каждого добавляемого DLL-файла.
Полный исходный код:
// JNA Demo. .fr
package CInterface;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class hello
{
public static void main(String[] args)
{
String mytext = "Hello World!";
if (args.length != 1)
{
System.err.println("You can enter you own text between quotes...");
System.err.println("Syntax: java -jar /jna/dist/demo.jar \"myowntext\"");
}
else
mytext = args[0];
// Le nom est c pour Unix et msvcrt pour Windows
String libName = "c";
if (System.getProperty("os.name").contains("Windows"))
{
libName = "msvcrt";
}
// Chargement dynamique de la librairie
CInterface demo = (CInterface) Native.loadLibrary(libName, CInterface.class);
demo.puts(mytext);
}
}
Загрузить код
- Простая демонстрация.
Архив содержит файлы демо, отображающие простой текст с помощью функции puts языка C.
Включен файл проекта для NetBeans.
См. проект Githube Java Native Access для получения jna.jar.