Acces nativ Java

Acces nativ Java
Date de bază

Întreținător Todd Fast, Timothy Wall, Liang Chen
Versiunea actuală  5.5.0
(30 octombrie 2019)
sistem de operare Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
limbaj de programare Java
categorie Biblioteca software
Licență LGPL Versiunea 2.1 sau o versiune ulterioară și (de la V4.0) licența software Apache V2.0
github.com/java-native-access/jna

Java Native Access ( JNA ) este o bibliotecă Java - program pentru acces la biblioteci dinamice specifice platformei („native”) ( DLL-uri în Windows sau „biblioteci partajate” pe alte sisteme). Spre deosebire de Java Native Interface (JNI), nu trebuie scris niciun cod specific platformei.

Funcția JNA este comparabilă cu Platform Invocation Services (P / Invoke) din .NET în Windows. Acceptă conversia automată între unele tipuri de date C și Java . Versiunea Java minimă necesară este 1.4.

Licență

LGPL Versiunea 2.1 sau o versiune ulterioară și (de la V4.0) licența software Apache V2.0.

Cartarea tipurilor de date

Tabelul următor arată cum se face maparea între Java și codul nativ cu JNA.

Tipul nativ mărimea Tip Java Tip Windows standard
char Întreg pe 8 biți octet BYTE, TCHAR
mic de statura 16 biți mic de statura cuvânt scurt
wchar_t Caracter de 16/32 biți char WCHAR, TCHAR
int Întreg pe 32 de biți int DWORD
int valoare booleană boolean BOOL
lung Număr întreg de 32/64 de biți NativLung LUNG
lung lung, __int64 Întreg pe 64 de biți lung
pluti FP pe 32 de biți pluti
dubla FP pe 64 de biți dubla
char * Șir C Şir LPCTSTR
nul * indicator indicator LPVOID, HANDLE, LPXXX

Aplicații

Următoarele proiecte software folosesc JNA:

exemplu

Următorul exemplu încarcă biblioteca Standard C pentru a apela funcția printf . Acest exemplu funcționează pe Microsoft Windows și 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]);
    }
  }
}

Link-uri web

Dovezi individuale

  1. github.com
  2. Asocieri tip implicite. jna.dev.java.net, accesat la 2 august 2011 .