JNA provides Java programs easy access to native shared
libraries (DLLs on Windows) 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.
Access is dynamic at runtime without code generation.
JNA's design aims to provide native access in a natural way
with a minimum of effort. No boilerplate or generated code is
required. While some attention is paid to performance,
correctness and ease of use take priority.
The JNA library uses a small native 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.