Acceso nativo de Java

Acceso nativo de Java
Datos básicos

Mantenedor Todd Fast, Timothy Wall, Liang Chen
Versión actual  5.5.0
(30 de octubre de 2019)
sistema operativo Windows, OS X, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
lenguaje de programación Java
categoría Biblioteca de software
Licencia LGPL versión 2.1 o superior y (desde V4.0) la licencia de software Apache V2.0
github.com/java-native-access/jna

Java Native acceso ( JNA ) es un Java - biblioteca de programas para acceder a la plataforma específica ( "nativos") librerías dinámicas ( DLL de Windows o "bibliotecas compartidas" en otros sistemas). A diferencia de la interfaz nativa de Java (JNI), no es necesario escribir ningún código específico de la plataforma.

La función de JNA es comparable a los servicios de invocación de plataforma (P / Invoke) de .NET en Windows. Admite la conversión automática entre algunos tipos de datos de C y Java . La versión mínima de Java requerida es 1.4.

Licencia

LGPL Versión 2.1 o superior y (desde V4.0) la Licencia de software Apache V2.0.

Mapeo de los tipos de datos

La siguiente tabla muestra cómo se realiza el mapeo entre Java y el código nativo con JNA.

Tipo nativo Talla Tipo de Java Tipo estándar de Windows
carbonizarse Entero de 8 bits byte BYTE, TCHAR
corto 16 bits corto PALABRA corta
wchar_t Carácter de 16/32 bits carbonizarse WCHAR, TCHAR
En t Entero de 32 bits En t DWORD
En t valor booleano booleano BOOL
largo Entero de 32/64 bits NativeLong LARGO
largo largo, __int64 Entero de 64 bits largo
flotador FP de 32 bits flotador
doble FP de 64 bits doble
char * cuerda C Cuerda LPCTSTR
vacío * puntero puntero LPVOID, MANIJA, LPXXX

Aplicaciones

Los siguientes proyectos de software utilizan JNA:

ejemplo

El siguiente ejemplo carga la biblioteca C estándar para llamar a la función printf . Este ejemplo funciona en Microsoft Windows y 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]);
    }
  }
}

enlaces web

Evidencia individual

  1. github.com
  2. Asignaciones de tipo predeterminadas. jna.dev.java.net, consultado el 2 de agosto de 2011 .