MCPcopy Index your code
hub / github.com/java-native-access/jna

github.com/java-native-access/jna @5.19.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 5.19.1 ↗ · + Follow
9,574 symbols 32,310 edges 587 files 3,625 documented · 38% 10 cross-repo links updated 5d ago★ 8,91696 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Java Native Access - JNA

Github Actions Build Status Travis Build Status Appveyor Build Status

Java Native Access (JNA)

The definitive JNA reference (including an overview and usage details) is in the JavaDoc. Please read the overview. Questions, comments, or exploratory conversations should begin on the mailing list, although you may find it easier to find answers to already-solved problems on StackOverflow.

JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes.

JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like the call does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.

JNA uses a small JNI library stub to dynamically invoke native code. 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 overhead of configuring and building JNI code for multiple platforms. Read this more in-depth description.

While significant attention has been paid to performance, correctness and ease of use take priority.

In addition, JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.

Projects Using JNA

JNA is a mature library with dozens of contributors and hundreds of commercial and non-commercial projects that use it. If you're using JNA, feel free to tell us about it. Include some details about your company, project name, purpose and size and tell us how you use the library.

Interesting Investigations/Experiments

There are also a number of examples and projects within the contrib directory of the JNA project itself.

Supported Platforms

JNA will build on most linux-like platforms with a reasonable set of GNU tools and a JDK. See the native Makefile for native configurations that have been built and tested. If your platform is supported by libffi, then chances are you can build JNA for it.

Pre-built platform support may be found here.

Download

Version 5.19.1

JNA

Maven Central jna-5.19.1.jar jna-jpms-5.19.1.jar

This is the core artifact of JNA and contains only the binding library and the core helper classes.

JNA Platform

Maven Central jna-platform-5.19.1.jar jna-platform-jpms-5.19.1.jar

This artifact holds cross-platform mappings and mappings for a number of commonly used platform functions, including a large number of Win32 mappings as well as a set of utility classes that simplify native access. The code is tested and the utility interfaces ensure that native memory management is taken care of correctly.

See PlatformLibrary.md for details.

Features

  • Automatic mapping from Java to native functions, with simple mappings for all primitive data types
  • Runs on most platforms which support Java
  • Automatic conversion between C and Java strings, with customizable encoding/decoding
  • Structure and Union arguments/return values, by reference and by value
  • Function Pointers, (callbacks from native code to Java) as arguments and/or members of a struct
  • Auto-generated Java proxies for native function pointers
  • By-reference (pointer-to-type) arguments
  • Java array and NIO Buffer arguments (primitive types and pointers) as pointer-to-buffer
  • Nested structures and arrays
  • Wide (wchar_t-based) strings
  • Native long support (32- or 64-bit as appropriate)
  • Demo applications/examples
  • Supported on 1.4 or later JVMs, including JavaME (earlier VMs may work with stubbed NIO support)
  • Customizable marshalling/unmarshalling (argument and return value conversions)
  • Customizable mapping from Java method to native function name, and customizable invocation to simulate C preprocessor function macros
  • Support for automatic Windows ASCII/UNICODE function mappings
  • Varargs support
  • Type-safety for native pointers
  • VM crash protection (optional)
  • Optimized direct mapping for high-performance applications.
  • COM support for early and late binding.
  • COM/Typelib java code generator.

Community and Support

All questions should be posted to the jna-users Google group. Issues can be submitted here on Github.

When posting to the mailing list, please include the following:

  • What OS/CPU/architecture you're using (e.g. Windows 7 64-bit)
  • Reference to your native interface definitions (i.e. C headers), if available
  • The JNA mapping you're trying to use
  • VM crash logs, if any
  • Example native usage, and your attempted Java usage

It's nearly impossible to indicate proper Java usage when there's no native reference to work from.

For commercial support, please contact twalljava [at] java [dot] net.

Using the Library

Primary Documentation (JavaDoc)

The definitive JNA reference is in the JavaDoc.

Developers

Contributing

You're encouraged to contribute to JNA. Fork the code from https://github.com/java-native-access/jna and submit pull requests.

For more information on setting up a development environment see Contributing to JNA.

If you are interested in paid support, feel free to say so on the jna-users mailing list. Most simple questions will be answered on the list, but more complicated work, new features or target platforms can be negotiated with any of the JNA developers (this is how several of JNA's features came into being). You may even encounter other users with the same need and be able to cost share the new development.

License

This library is licensed under the LGPL, version 2.1 or later, or (from version 4.0 onward) the Apache License, version 2.0. Commercial support may be available, please e-mail twall[at]users[dot]sf[dot]net. See LICENSE for more information.

NOTE: Oracle is not sponsoring this project, even though the package name (com.sun.jna) might imply otherwise.

Extension points exported contracts — how you extend this code

CryptGetSignerCertificateCallback (Interface)
The CryptGetSignerCertificateCallback user supplied callback function is used with the CRYPT_VERIFY_MESSAGE_PARA structu [22 …
contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java
FunctionMapper (Interface)
Provides mapping of Java method names to native function names. An instance of this interface may be provided to {@link [7 …
src/com/sun/jna/FunctionMapper.java
DirectCallback (Interface)
(no doc) [18 implementers]
test/com/sun/jna/DirectTest.java
_Font (Interface)
uuid({00020952-0000-0000-C000-000000000046})
contrib/msoffice/src/com/sun/jna/platform/win32/COM/util/office/word/_Font.java
FE_EXPORT_FUNC (Interface)
An application-defined callback function used with ReadEncryptedFileRaw. The system calls ExportCallback one or more tim [22 …
contrib/platform/src/com/sun/jna/platform/win32/WinBase.java
ToNativeConverter (Interface)
Define conversion from a Java type to its corresponding native type. [28 implementers]
src/com/sun/jna/ToNativeConverter.java
Int32CallbackX (Interface)
(no doc) [22 implementers]
test/com/sun/jna/CallbacksTest.java
Columns (Interface)
uuid({0002094B-0000-0000-C000-000000000046})
contrib/msoffice/src/com/sun/jna/platform/win32/COM/util/office/word/Columns.java

Core symbols most depended-on inside this repo

getPointer
called by 676
contrib/platform/src/com/sun/jna/platform/win32/COM/IUnknownCallback.java
intValue
called by 419
contrib/platform/src/com/sun/jna/platform/win32/Variant.java
getValue
called by 379
src/com/sun/jna/ptr/IntByReference.java
size
called by 360
src/com/sun/jna/Memory.java
read
called by 338
src/com/sun/jna/Function.java
GetLastError
called by 269
test/com/sun/jna/NativeLibraryTest.java
getValue
called by 253
src/com/sun/jna/ptr/PointerByReference.java
length
called by 220
src/com/sun/jna/WString.java

Shape

Method 7,475
Class 1,600
Interface 445
Enum 46
Function 8

Languages

Java100%
Python1%

Modules by API surface

contrib/platform/src/com/sun/jna/platform/win32/DdemlUtil.java300 symbols
contrib/platform/src/com/sun/jna/platform/unix/X11.java245 symbols
test/com/sun/jna/StructureTest.java230 symbols
contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java181 symbols
test/com/sun/jna/CallbacksTest.java179 symbols
contrib/platform/src/com/sun/jna/platform/win32/WinNT.java179 symbols
contrib/platform/src/com/sun/jna/platform/win32/OaIdl.java163 symbols
contrib/platform/src/com/sun/jna/platform/win32/WinDef.java157 symbols
src/com/sun/jna/Native.java129 symbols
contrib/platform/src/com/sun/jna/platform/WindowUtils.java125 symbols
contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java119 symbols
contrib/platform/src/com/sun/jna/platform/win32/WinBase.java119 symbols

For agents

$ claude mcp add jna \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact