Java Native Access

Java Native Access
Perustieto

Ylläpitäjä Todd Fast, Timothy Wall, Liang Chen
Nykyinen  versio 5.5.0
(30. lokakuuta 2019)
käyttöjärjestelmä Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
ohjelmointikieli Java
kategoria Ohjelmistokirjasto
Lisenssi LGPL- versio 2.1 tai uudempi ja (versiosta V4.0) Apache-ohjelmistolisenssi V2.0
github.com/java-native-access/jna

Java Native Access ( JNA ) on Java - ohjelmakirjasto, jolla pääsee alustakohtaisiin ("alkuperäisiin") dynaamisiin kirjastoihin ( DLL : t Windowsissa tai "jaetut kirjastot" muissa järjestelmissä). Toisin kuin Java Native Interface (JNI), alustakohtaista koodia ei tarvitse kirjoittaa.

JNA: n toiminta on verrattavissa .NET : n Platform Invocation Services (P / Invoke) -käyttöjärjestelmään Windowsissa. Se tukee automaattista muunnosta joidenkin C- ja Java- tietotyyppien välillä . Pakollinen Java-versio on vähintään 1.4.

Lisenssi

LGPL- versio 2.1 tai uudempi ja (versiosta V4.0) Apache-ohjelmistolisenssi V2.0.

Tietotyyppien kartoitus

Seuraava taulukko osoittaa, miten Java- ja natiivikoodin välinen kartoitus tehdään JNA: lla.

Alkuperäinen tyyppi koko Java-tyyppi Vakiotyyppi Windows
hiiltyä 8-bittinen kokonaisluku tavu BYTE, TCHAR
lyhyt 16-bittinen lyhyt lyhyt SANA
wchar_t 16/32-bittinen merkki hiiltyä WCHAR, TCHAR
int 32-bittinen kokonaisluku int DWORD
int looginen arvo looginen BOOL
pitkä 32/64-bittinen kokonaisluku AlkuperäinenPitkä PITKÄÄ
pitkä pitkä, __int64 64-bittinen kokonaisluku pitkä
kellua 32-bittinen FP kellua
kaksinkertainen 64-bittinen FP kaksinkertainen
hiili * C-merkkijono Merkkijono LPCTSTR
mitätön * osoitin osoitin LPVOID, KAHVA, LPXXX

Sovellukset

Seuraavat ohjelmistoprojektit käyttävät JNA: ta:

esimerkki

Seuraava esimerkki lataa Standard C -kirjaston kutsua printf- toimintoa. Tämä esimerkki toimii Microsoft Windowsissa ja Linux / Unix / Mac OS X: ssä .

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

nettilinkit

Yksittäiset todisteet

  1. github.com
  2. Oletustyyppikartoitukset. jna.dev.java.net, käytetty 2. elokuuta 2011 .