Java natív hozzáférés

Java natív hozzáférés
Alapadatok

Fenntartó Todd Fast, Timothy Wall, Liang Chen
Jelenlegi  verzió 5.5.0
(2019. október 30.)
operációs rendszer Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
programozási nyelv Jáva
kategória Szoftvertár
Engedély LGPL 2.1-es vagy újabb verzió, és (a V4.0-tól) az Apache szoftverlicenc V2.0
github.com/java-native-access/jna

A Java Native Access ( JNA ) egy Java - programkönyvtár platformspecifikus ("natív") dinamikus könyvtárak ( DLL-ek Windows-ban vagy "megosztott könyvtárak" más rendszereken) eléréséhez . A Java Native Interface (JNI) -vel ellentétben nem szükséges platformspecifikus kódot írni.

A JNA funkciója összehasonlítható a .NET Platform Invocation Services (P / Invoke) szolgáltatásával Windows alatt. Támogatja az automatikus átalakítást egyes C és Java adattípusok között . A minimálisan szükséges Java verzió 1.4.

Engedély

LGPL 2.1-es vagy újabb verzió, valamint (a V4.0-tól) az Apache szoftverlicenc V2.0.

Az adattípusok feltérképezése

Az alábbi táblázat bemutatja, hogyan történik a Java és a natív kód közötti leképezés a JNA-val.

Natív típus méret Java típus Normál Windows típus
char 8 bites egész szám byte BYTE, TCHAR
rövid 16 bites rövid rövid SZÓ
wchar_t 16/32 bites karakter char WCHAR, TCHAR
int 32 bites egész szám int DWORD
int logikai érték logikai érték BOOL
hosszú 32/64 bites egész szám NativeLong HOSSZÚ
hosszú hosszú, __int64 64 bites egész szám hosszú
úszó 32 bites FP úszó
kettős 64 bites FP kettős
char * C karakterlánc Húr LPCTSTR
érvénytelen * mutató mutató LPVOID, FOGANTYÚ, LPXXX

Alkalmazások

A következő szoftverprojektek használják a JNA-t:

példa

Az alábbi példa betölti a Standard C könyvtárat a printf függvény meghívására . Ez a példa Microsoft Windows és Linux / Unix / Mac OS X rendszereken működik .

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

web Linkek

Egyéni bizonyíték

  1. github.com
  2. Alapértelmezett típusú leképezések. jna.dev.java.net , 2011. augusztus 2 .