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
- Página de inicio de Java Native Access (inglés)
- Java Native Access: página de descarga (inglés)
- Java Native Access - Lista de correo de usuarios (inglés)
Evidencia individual
- ↑ github.com
- ↑ Asignaciones de tipo predeterminadas. jna.dev.java.net, consultado el 2 de agosto de 2011 .