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 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 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 () automatisiert werden.
1 Kommentare
daniel ·
Im ersten Satz muss es nicht JNA-Kontakt, sondern JNI-Kontakt heißen.
Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.