Java Native Access

Java Native Access
Grundlæggende data

Vedligeholdelse Todd Fast, Timothy Wall, Liang Chen
Aktuel  version 5.5.0
(30. oktober 2019)
operativ system Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
programmeringssprog Java
kategori Softwarebibliotek
Licens LGPL version 2.1 eller nyere og (fra V4.0) Apache softwarelicens V2.0
github.com/java-native-access/jna

Java Native Access ( JNA ) er et Java - programbibliotek til adgang til platformsspecifikke ("native") dynamiske biblioteker ( DLL'er i Windows eller "delte biblioteker" på andre systemer). I modsætning til Java Native Interface (JNI) skal der ikke skrives nogen platformsspecifik kode.

JNA's funktion kan sammenlignes med Platform Invocation Services (P / Invoke) af .NET under Windows. Det understøtter automatisk konvertering mellem nogle C- og Java- datatyper . Den mindst krævede Java-version er 1.4.

Licens

LGPL version 2.1 eller nyere og (fra V4.0) Apache softwarelicens V2.0.

Kortlægning af datatyperne

Den følgende tabel viser, hvordan kortlægningen mellem Java og den oprindelige kode udføres med JNA.

Indfødt type størrelse Java-type Standard Windows-type
char 8-bit heltal byte BYTE, TCHAR
kort 16-bit kort kort WORD
wchar_t 16/32-bit karakter char WCHAR, TCHAR
int 32-bit heltal int DWORD
int boolsk værdi boolsk BOOL
lang 32/64-bit heltal NativeLong LANG
lang lang, __int64 64-bit heltal lang
flyde 32-bit FP flyde
dobbelt 64-bit FP dobbelt
char * C-streng Snor LPCTSTR
ugyldig * markør markør LPVOID, HÅNDTAG, LPXXX

Ansøgninger

Følgende softwareprojekter bruger JNA:

eksempel

I det følgende eksempel indlæses Standard C-biblioteket for at kalde printf- funktionen. Dette eksempel virker på Microsoft Windows og 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

Individuelle beviser

  1. github.com
  2. Standardtypekortlægninger. jna.dev.java.net, adgang til 2. august 2011 .