Java Native Access

Java-Bibliothek
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 2. März 2016 um 13:50 Uhr durch Bastie (Diskussion | Beiträge) (Mappinginformationen vom englischen Wikipedia übernommen). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Java Native Access (JNA) ist eine Java-Programmbibliothek für den Zugriff auf plattformspezifische („native“) dynamische Programmbibliotheken (DLLs in Windows oder „shared libraries“ auf anderen Systemen). Hierbei braucht im Unterschied zu Java Native Interface (JNI) kein plattform-spezifischer Code geschrieben zu werden.

Java Native Access
Basisdaten

Aktuelle Version 4.2.1
(18. Oktober 2015)
Betriebssystem Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
Programmier­sprache Java
Kategorie Software Bibliothek
Lizenz LGPL Version 2.1 oder höher und (ab V4.0) die Apache Software License V2.0
github.com/java-native-access/jna

JNA ist in der Funktion mit den Platform Invocation Services (P/Invoke) von .NET unter Windows vergleichbar. Es unterstützt eine automatische Umwandlung zwischen einigen C- und Java-Datentypen. Die minimal erforderliche Java-Version ist 1.4.

Lizenz

LGPL Version 2.1 oder höher und (ab V4.0) die Apache Software License V2.0.[1]

Mapping der Datentypen

Die folgende Tabelle zeigt, wie das Mapping zwischen Java und dem nativen Code mit JNA erfolgt.[2]

Nativer Typ Größe Java Typ Standard Windows Type
char 8-bit integer byte BYTE, TCHAR
short 16-bit short short WORD
wchar_t 16/32-bit character char WCHAR, TCHAR
int 32-bit integer int DWORD
int boolean value boolean BOOL
long 32/64-bit integer NativeLong LONG
long long, __int64 64-bit integer long
float 32-bit FP float
double 64-bit FP double
char* C string String LPCTSTR
void* pointer Pointer LPVOID, HANDLE, LPXXX


Anwendungen

Die folgenden Softwareprojekte verwenden JNA:

Beispiel

Das folgende Beispiel lädt die Standard C Library, um die printf-Funktion aufzurufen. Dieses Beispiel funktioniert auf Microsoft Windows und Linux / Unix / Mac OS X.

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Einfaches Beispiel einer Deklaration und Nutzung einer Dynamischen Programmbibliothek bzw. "shared library". */
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]);
    }
  }
}

Einzelnachweise

  1. github.com
  2. Default Type Mappings. jna.dev.java.net, abgerufen am 2. August 2011.