JNA (Java Native Access)

Eine Bibliothek zum Ansprechen dynamischer Bibliotheken ohne JNA-Kontakt und damit ohne C(++)-Compiler ist JNA (Java Native Access). Beheimatet ist das Projekt unter https://github.com/twall/jna/  und es steht unter der Lizenzform LGPL. JNA benötigt nur das Archiv jna.jar im Klassenpfad und geht dann fast von selbst zur dynamischen Bibliotheken. Verschiedene Plattformen werden unterstützt, dazu zählen Windows, Linux und Mac OS X.

Zur dem Zugriff müssen allerdings Java-Schnittstellen als typisierte Versionen der nativen Funktionen deklariert werden, damit auch die Datentypen von der Java-Seite automatisch auf Datentypen der nativen Seite gemappt werden können. Die Dokumentation unter https://github.com/twall/jna/blob/master/www/GettingStarted.md  eigt ein Beispiel (hier etwas gekürzt):

import com.sun.jna.*;

public class HelloWorld {
  public interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary) Native.loadLibrary( Platform.isWindows() ? "msvcrt" : "c",
                                                       CLibrary.class );
    void printf( String format, Object... args );
  }

  public static void main( String[] args ) {
    CLibrary.INSTANCE.printf( "Hello, World\n" );
    for ( int i = 0; i < args.length; i++ )
      CLibrary.INSTANCE.printf( "Argument %d: %s\n", i, args[ i ] );
  }
}

Die Übertragung der Funktionen von der C-Seite in Java-Schnittstellen – wie CLibrary in dem Beispiel – kann auch mit JNAerator (http://code.google.com/p/jnaerator/) automatisiert werden.

Ähnliche Beiträge

Veröffentlicht in Insel

Ein Gedanke zu “JNA (Java Native Access)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert