Java Native Access
Java Native Access | |
---|---|
Basisdaten
| |
Aktuelle Version | 4.2.1 (18. Oktober 2015) |
Betriebssystem | Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile |
Programmiersprache | 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 |
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.
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]);
}
}
}
Weblinks
- Java Native Access Homepage (englisch)
- Java Native Access - Download page (englisch)
- Java Native Access - User Mailing List (englisch)
Einzelnachweise
- ↑ github.com
- ↑ Default Type Mappings. jna.dev.java.net, abgerufen am 2. August 2011.