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, использующий этот интерфейс.

Чтобы выполнить демонстрацию:

  1. Загрузите и установите NetBeans.
  2. Download здесь файл проекта, он разрывается в директории jna.
  3. Загрузить книжный магазин jna.jar на сайте Sun и скопировать его в каталог jna.
  4. Загрузить проект в NetBeans из этого каталога.
  5. Добавить jna.jar в список книжных магазинов:
    Свойства проекта -> Библиотеки -> Добавить JAR/Folder.
  6. Составьте проект.

Затем введите командную строку:

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);
}
}

Загрузить код

См. проект Githube Java Native Access для получения jna.jar.