<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=Java_Native_Access</id>
	<title>Java Native Access - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=Java_Native_Access"/>
	<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=Java_Native_Access&amp;action=history"/>
	<updated>2026-04-21T19:03:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://70.231.62.181/index.php?title=Java_Native_Access&amp;diff=867387&amp;oldid=prev</id>
		<title>2605:8D80:6C20:3AAA:CDA1:E542:1545:4252 at 07:20, 31 October 2025</title>
		<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=Java_Native_Access&amp;diff=867387&amp;oldid=prev"/>
		<updated>2025-10-31T07:20:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox software&lt;br /&gt;
| name = Java Native Access&lt;br /&gt;
| logo = &lt;br /&gt;
| screenshot = &lt;br /&gt;
| caption = &lt;br /&gt;
| developer = &lt;br /&gt;
| released = {{Start date|2007|05|09}}&amp;lt;!-- https://github.com/twall/jna/commits/master?page=35 as of May 2xxx&lt;br /&gt;
&lt;br /&gt;
012 --&amp;gt;&lt;br /&gt;
| latest release version = 5.17.0&lt;br /&gt;
| latest release date = {{Start date and age|2025|03|16}}&amp;lt;ref name=&amp;quot;5.17.0&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
| url=https://github.com/java-native-access/jna/releases/tag/5.17.0&lt;br /&gt;
| title=Release 5.17.0&lt;br /&gt;
| website=[[GitHub]]&lt;br /&gt;
| date=2025-03-16}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| latest preview version = &lt;br /&gt;
| latest preview date = &lt;br /&gt;
| operating system = Windows, macOS, Android, AIX, FreeBSD, [[Linux]], OpenBSD, Solaris, Windows Mobile&lt;br /&gt;
| platform = [[Java (software platform)|Java]] 1.4 or later (for JNA 3.5.2 or earlier), Java 1.6 for JNA 4.0.0 and later&lt;br /&gt;
| size = 1.83 MB (archived)&lt;br /&gt;
| programming language = [[C (programming language)|C]] and [[Java (programming language)|Java]]&lt;br /&gt;
| genre = [[Library (computer science)|Software Library]]&lt;br /&gt;
| license = [[LGPL]] version 2.1 or later and (from version 4.0 onward) the Apache Software License, version 2.0&lt;br /&gt;
| website = {{url|https://github.com/java-native-access/jna}}&lt;br /&gt;
| author = Todd Fast, Timothy Wall, Liang Chen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Java Native Access&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;JNA&amp;#039;&amp;#039;&amp;#039;) is a community-developed library that provides [[Java (software platform)|Java]] programs easy access to [[Shared library|native shared libraries]] without using the [[Java Native Interface]] (JNI). JNA&amp;#039;s design aims to provide native access in a natural way with a minimum of effort. Unlike JNI, no [[Boilerplate code|boilerplate]] or generated [[glue code]] is required.&lt;br /&gt;
&lt;br /&gt;
Since Java 22, the [[Java Native Interface#Foreign Function and Memory API|Foreign Function and Memory API]] was provided as a standard modern alternative.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
The JNA library uses a small native library called [[foreign function interface]] library ([[libffi]]) to dynamically invoke [[native code]]. The JNA library uses native functions allowing code to load a library by name and retrieve a [[Pointer (computer programming)|pointer]] to a function within that library, and uses [[libffi]] library to invoke it, all without [[static binding]]s, [[header files]], or any compile phase. The developer uses a [[Java interface]] to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high development overhead of configuring and building [[JNI]] code.&lt;br /&gt;
&lt;br /&gt;
JNA is built and tested on [[macOS]], [[Microsoft Windows]], [[FreeBSD]] / [[OpenBSD]], [[Solaris (operating system)|Solaris]], [[Linux]], [[AIX]], [[Windows Mobile]], and [[Android (operating system)|Android]]. It is also possible to tweak and recompile the native build configurations to make it work on most other platforms that run Java.&lt;br /&gt;
&lt;br /&gt;
==Mapping types==&lt;br /&gt;
The following table shows an overview of types mapping between Java and native code and supported by the JNA library.&amp;lt;ref&amp;gt;{{cite web|url=https://github.com/twall/jna/blob/master/www/Mappings.md |title=Default Type Mappings |publisher=jna.dev.java.net|access-date=2011-08-02}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Native Type&lt;br /&gt;
! Size&lt;br /&gt;
! Java Type&lt;br /&gt;
! Common Windows Types&lt;br /&gt;
|-&lt;br /&gt;
| [[Character (computing)|{{mono|char}}]]&lt;br /&gt;
| 8-bit integer&lt;br /&gt;
| {{mono|[[byte]]}}&lt;br /&gt;
| {{mono|BYTE, TCHAR}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Short integer|{{mono|short}}]]&lt;br /&gt;
| 16-bit integer&lt;br /&gt;
| [[Short integer|{{mono|short}}]]&lt;br /&gt;
| {{mono|WORD}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Wide character|{{mono|wchar_t}}]]&lt;br /&gt;
| 16/32-bit character&lt;br /&gt;
| [[Character (computing)|{{mono|char}}]]&lt;br /&gt;
| {{mono|TCHAR}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Integer (computer science)|{{mono|int}}]]&lt;br /&gt;
| 32-bit integer&lt;br /&gt;
| [[Integer (computer science)|{{mono|int}}]]&lt;br /&gt;
| {{mono|DWORD}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Integer (computer science)|{{mono|int}}]]&lt;br /&gt;
| boolean value&lt;br /&gt;
| {{mono|boolean}}&lt;br /&gt;
| {{mono|BOOL}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Long integer|{{mono|long}}]]&lt;br /&gt;
| 32/64-bit integer&lt;br /&gt;
| {{mono|com.sun.jna.NativeLong}}&lt;br /&gt;
| {{mono|LONG}}&lt;br /&gt;
|-&lt;br /&gt;
| [[long long]]&lt;br /&gt;
| 64-bit integer&lt;br /&gt;
| [[Long integer|{{mono|long}}]]&lt;br /&gt;
| {{mono|__int64}}&lt;br /&gt;
|-&lt;br /&gt;
| [[single precision|{{mono|float}}]]&lt;br /&gt;
| 32-bit FP&lt;br /&gt;
| [[single precision|{{mono|float}}]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[double precision|{{mono|double}}]]&lt;br /&gt;
| 64-bit FP&lt;br /&gt;
| [[double precision|{{mono|double}}]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{mono|[[Character (computing)#char|char]]*}}&lt;br /&gt;
| C string&lt;br /&gt;
| {{mono|String}}&lt;br /&gt;
| {{mono|LPCSTR}}&lt;br /&gt;
|-&lt;br /&gt;
| {{mono|[[Void pointer|void*]]}}&lt;br /&gt;
| {{mono|pointer}}&lt;br /&gt;
| {{mono|com.sun.jna.Pointer}}&lt;br /&gt;
| {{mono|LPVOID, HANDLE, LPXXX}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The meaning of {{mono|TCHAR}} changes between {{mono|char}} and {{mono|wchar_t}} according to some preprocessor definitions. {{mono|LPCTSTR}} follows.&lt;br /&gt;
&lt;br /&gt;
== Memory byte alignment for data structures ==&lt;br /&gt;
Native libraries have no standardized memory byte alignment flavor. JNA defaults to an OS platform specific setting, that can be overridden by a library specific custom alignment. If the alignment details are not given in the documentation of the native library, the correct alignment must be determined by trial and error during implementation of the Java wrapper.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;!-- To exposes the methods in the native library an interface needed to extends the class com.sun.jna.Library with same name of --&amp;gt;&lt;br /&gt;
The following program loads the local [[C standard library]] implementation and uses it to call the &amp;#039;&amp;#039;{{mono|[[printf]]}}&amp;#039;&amp;#039; function.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The following code is portable and works the same on [[Microsoft Windows|Windows]] and POSIX ([[Linux]] / [[Unix]] / [[macOS]]) platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.wikipedia.examples;&lt;br /&gt;
&lt;br /&gt;
import com.sun.jna.Library;&lt;br /&gt;
import com.sun.jna.Native;&lt;br /&gt;
import com.sun.jna.Platform;&lt;br /&gt;
&lt;br /&gt;
// Simple example of native library declaration and usage.&lt;br /&gt;
public class HelloWorld {&lt;br /&gt;
    public interface CLibrary extends Library {&lt;br /&gt;
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(&lt;br /&gt;
            (Platform.isWindows() ? &amp;quot;msvcrt&amp;quot; : &amp;quot;c&amp;quot;), CLibrary.class);&lt;br /&gt;
        void printf(String format, Object... args);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        CLibrary.INSTANCE.printf(&amp;quot;Hello, World\n&amp;quot;);&lt;br /&gt;
        for (int i = 0; i &amp;lt; args.length; i++) {&lt;br /&gt;
            CLibrary.INSTANCE.printf(&amp;quot;Argument %d: %s\n&amp;quot;, i, args[i]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following program loads the [[C POSIX library]] and uses it to call the standard &amp;#039;&amp;#039;{{mono|[[mkdir]]}}&amp;#039;&amp;#039; function.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The following code is portable and works the same on [[POSIX]] standards platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.wikipedia.examples;&lt;br /&gt;
&lt;br /&gt;
import com.sun.jna.Library;&lt;br /&gt;
import com.sun.jna.Native;&lt;br /&gt;
&lt;br /&gt;
// Simple example of native C POSIX library declaration and usage.&lt;br /&gt;
public class Example {&lt;br /&gt;
    public interface Posix extends Library {&lt;br /&gt;
	    public int chmod(String filename, int mode);&lt;br /&gt;
	    public int chown(String filename, int user, int group);&lt;br /&gt;
	    public int rename(String oldpath, String newpath);&lt;br /&gt;
	    public int kill(int pid, int signal);&lt;br /&gt;
	    public int link(String oldpath, String newpath);&lt;br /&gt;
	    public int mkdir(String path, int mode);&lt;br /&gt;
	    public int rmdir(String path);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        // It is possible to load msvcrt for its partial POSIX support on Windows...&lt;br /&gt;
        Posix posix = (Posix) Native.loadLibrary(&amp;quot;c&amp;quot;, Posix.class);&lt;br /&gt;
        // but it will still fail on Windows due to /tmp being missing.&lt;br /&gt;
	    posix.mkdir(&amp;quot;/tmp/newdir&amp;quot;, 0777);&lt;br /&gt;
	    posix.rename(&amp;quot;/tmp/newdir&amp;quot;,&amp;quot;/tmp/renamedir&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program below loads the &amp;#039;&amp;#039;&amp;#039;{{mono|[[Kernel32.dll]]}}&amp;#039;&amp;#039;&amp;#039; and uses it to call the &amp;#039;&amp;#039;{{mono|[[Beep (sound)|Beep]]}}&amp;#039;&amp;#039; and &amp;#039;&amp;#039;{{mono|[[Sleep (system call)|Sleep]]}}&amp;#039;&amp;#039; functions.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The following code works only on [[Microsoft Windows|Windows]] platforms.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.wikipedia.examples;&lt;br /&gt;
&lt;br /&gt;
import com.sun.jna.Library;&lt;br /&gt;
import com.sun.jna.Native;&lt;br /&gt;
&lt;br /&gt;
// Simple example of Windows native library declaration and usage.&lt;br /&gt;
public class Example {&lt;br /&gt;
    public interface Kernel32 extends Library {&lt;br /&gt;
        // FREQUENCY is expressed in hertz and ranges from 37 to 32767&lt;br /&gt;
        // DURATION is expressed in milliseconds&lt;br /&gt;
        public boolean Beep(int FREQUENCY, int DURATION);&lt;br /&gt;
        public void Sleep(int DURATION);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
	    Kernel32 lib = (Kernel32) Native.loadLibrary(&amp;quot;kernel32&amp;quot;, Kernel32.class);&lt;br /&gt;
	    lib.Beep(698, 500);&lt;br /&gt;
	    lib.Sleep(500);&lt;br /&gt;
	    lib.Beep(698, 500);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Portal|Computer programming|Free Software}}&lt;br /&gt;
* [[JNAerator]]&lt;br /&gt;
* [[Platform Invocation Services|P/Invoke]]&lt;br /&gt;
* [[SWIG]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [https://github.com/java-native-access/jna#readme Java Native Access Web Page]&lt;br /&gt;
* [https://github.com/java-native-access/jna#download Java Native Access - Download page]&lt;br /&gt;
* [https://groups.google.com/group/jna-users/about Java Native Access - User Mailing List]&lt;br /&gt;
* {{cite web |last1=Friesen |first1=Jeff |date=2008-02-05 |df=dmy |url=https://www.infoworld.com/article/2077828/open-source-java-projects-java-native-access.html |title=Open source Java projects: Java Native Access |department=Open Source Java Tutorials |work=[[JavaWorld]] |access-date=2020-07-27}}&lt;br /&gt;
* {{cite web |last1=Morris |first1=Stephen B. |date=2009-05-20 |df=dmy |url=https://today.java.net/pub/a/today/2009/05/19/protect-your-legacy-code-jna.html |title=Protect Your Legacy Code Investment with JNA |work=today.java.net |archive-url=https://web.archive.org/web/20150113014701/https://today.java.net/pub/a/today/2009/05/19/protect-your-legacy-code-jna.html |archive-date=2015-01-13}}&lt;br /&gt;
* {{cite web |last1=Dasgupta |first1=Sanjay |date=2009-11-11 |df=dmy |url=http://today.java.net/article/2009/11/11/simplify-native-code-access-jna |title=Simplify Native Code Access with JNA |work=today.java.net |archive-url=https://web.archive.org/web/20091115074230/http://today.java.net/article/2009/11/11/simplify-native-code-access-jna |archive-date=2009-11-15 }}&lt;br /&gt;
* {{cite web |last1=Doubrovkine |first1=Daniel |date=2011-06-20 |df=dmy |url=https://code.dblock.org/2011/06/20/jna-is-now-a-githubber.html |title=JNA is now a Githubber |work=code.dblock.org |access-date=2020-07-27}}&lt;br /&gt;
* {{cite web |last1=Kiaer |first1=Jesper |date=2010-03-21 |df=dmy |url=https://nevermind.dk/nevermind/blog.nsf/subject/calling-the-domino-c-api-from-an-xpage-or-a-java-agent |title=Calling the Lotus Domino C-API with JNA |work=Nevermind.dk |access-date=2020-07-27}}&lt;br /&gt;
&amp;lt;!-- http://www.jroller.com/phidias/entry/joys_of_jna --&amp;gt;&lt;br /&gt;
[[Category:Java platform]]&lt;/div&gt;</summary>
		<author><name>2605:8D80:6C20:3AAA:CDA1:E542:1545:4252</name></author>
	</entry>
</feed>