JNA v5.7.0 Release Notes

  • πŸ”‹ Features

    • #1217: Add mappings for AIX Perfstat library to c.s.j.p.unix.aix - @dbwiddis.
    • 🏁 #1231: The test suite can now be executed on Windows using either ANSI or UNICODE win32 API by passing -Dw32.ascii=true/false to ant. Previously, UNICODE was always used. - @T-Svensson
    • #1237: Experimental: Add artifacts that make jna and jna-platform named modules (provide module-info.class). The new artifacts are named jna-jpms.jar and jna-platform-jpms.jar - @matthiasblaesing.
    • #1242: Add CallWindowProc to User32 - @heldplayer.
    • 🐎 #1239: Improve performance of allocation of c.s.j.Memory objects - @joerg1985.
    • 🐎 #1246: Improve performance of c.s.j.Structure#read and c.s.j.Structure#write - @joerg1985.
    • #1260: Add mapping for X11 generic events - @lafoletc.
    • #1265: Add mapping for XQueryExtension - @lafoletc.
    • #1263: Add LowLevelMouseProc - @nordiakt

    πŸ› Bug Fixes

    • πŸ— #1244: Fix building on GCC 10 - @matthiasblaesing.
    • #1252: - Fix bindings of CTL_ENTRY#getRgAttribute, CTL_INFO#getRgCTLEntry, CTL_INFO#getRgExtension, CERT_EXTENSIONS#getRgExtension, CERT_INFO#getRgExtension, CRL_INFO#getRgCRLEntry, CRL_INFO#getRgExtension, CRL_ENTRY#getRgExtension. Add bindings for CertEnumCertificatesInStore, CertEnumCTLsInStore, CertEnumCRLsInStore and CryptQueryObject in c.s.j.p.win32.Crypt32. WARNING: The signatures for CTL_INFO#getRgCTLEntry and CTL_INFO#getRgExtension were changed - as the original signatures were obviously wrong and read the wrong attributes, it is not considered an API break - @matthiasblaesing.
    • #1275: Fix CFStringRef#stringValue for empty Strings - @dyorgio.
    • 🚚 #1279: Remove DLLCallback import from CallbackReference - @dyorgio.
    • 🏁 #1278: Improve compatibility of c.s.j.p.WindowUtils#getProcessFilePath and fix unittests for windows 32bit intel - @matthiasblaesing.
    • #1284: Fix illegal access exceptions, when retrieving options for private library interfaces with an instance field - @fkistner.

    πŸš€ Release 5.6.0

    πŸ”‹ Features

    • 🚚 #1160: Make FileUtils#moveToTrash a varargs method - @matthiasblaesing.
    • #1167: Add c.s.j.p.win32.Kernel32#GetProcessAffinityMask - @dbwiddis.
    • #1168: Add c.s.j.p.win32.Kernel32#SetProcessAffinityMask - @dbwiddis.
    • 🐧 #1169: Wait for process in getLinuxLdPaths - @rdesgroppes.
    • #1178: Add c.s.j.p.win32.IPHlpAPI#GetTcpStatistics, c.s.j.p.win32.IPHlpAPI#GetUdpStatistics, c.s.j.p.win32.IPHlpAPI#GetTcpStatisticsEx and c.s.j.p.win32.IPHlpAPI#GetUdpStatisticsEx - @dbwiddis.
    • #1182: Add toString to classes extending c.s.j.ptr.ByReference - @dbwiddis.
    • #1191: Add c.s.j.p.win32.Advapi32Util#getTokenPrimaryGroup - @dbwiddis.
    • #1194: Add GetConsoleScreenBufferInfo, ReadConsoleInput and WriteConsole with associated structures to c.s.j.p.win32.Wincon - @rednoah.
    • #1198: Add NetSessionEnum to c.s.j.p.win32.Netapi32 and WTSEnumerateSessions, WTSQuerySessionInformation, and WTSFreeMemory to c.s.j.p.win32.Wtsapi32 - @dbwiddis.
    • 🐧 #1200: Add mappings for libudev to c.s.j.p.linux.Udev - @dbwiddis.
    • #1202: Add mappings supporting shared memory including c.s.j.p.unix.LibCAPI types size_t and ssize_t, c.s.j.p.linux.LibC methods munmap(), msync(), and close(), c.s.j.p.unix.LibCUtil mapping mmap() and ftruncate(), and c.s.j.p.linux.LibRT methods shm_open() and shm_unlink() - @dbwiddis.
    • #1209: Add mappings for Thread32First and Thread32Next to c.s.j.p.win32.Kernel32 - @dbwiddis.
    • #1214: Add mapping for EnumProcesses to c.s.j.p.win32.Psapi and c.s.j.p.win32.PsapiUtil - @T-Svensson.

    πŸ› Bug Fixes

    • #1183: c.s.j.p.win32.WinDef.CHARByReference#getValue should only read one byte - @dbwiddis.
    • #1184: c.s.j.p.win32.WinDef.ULONGLONG should always be 8 bytes - @dbwiddis.
    • #1196: c.s.j.p.win32.WinNT.LARGE_INTEGER needs to populate both union fields - @dbwiddis.
    • 🍎 #1216: Failure loading frameworks on macOS 11 - @dkocher.

    πŸš€ Release 5.5.0

    πŸ”‹ Features

    • #1131: Add CoreFoundation, IOKit, and DiskArbitration mappings in c.s.j.p.mac. @dbwiddis.
    • #1143: c.s.j.p.mac.SystemB now extends c.s.j.p.unix.LibCAPI. @dbwiddis.
    • πŸ‘ #1147: Add additional OSGi headers for the JNA bundle to support 32bit ARM (hardfloat) @mattixtech.
    • #1148/#1096: Include Win32 COM utils (c.s.j.p.win32.com.util and c.s.j.p.win32.com.annotation) in OSGI bundle @dbwiddis.

    πŸ› Bug Fixes

    • #1115: Fix signature for c.s.j.p.win32.Kernel32#CreateRemoteThread and bind VirtualAllocEx, VirtualFreeEx, GetExitCodeThread in c.s.j.p.win32.Kernel32 - @apangin, @matthiasblaesing.
    • 🏁 #1127: Windows needs a wide string in c.s.j.p.win32.COM.IShellFolder#ParseDisplayName - @dbwiddis.
    • #1128: KEY_ALL_ACCESS value is incorrect in c.s.j.p.win32.WinNT.java - @trevormaggs.
    • πŸ‘· #1133: Ensure JARs created from the build system don't contain invalid Info-ZIP Unicode Path extra info - @matthiasblaesing.
    • #1134: Read correct member of WinBase.SYSTEM_INFO.processorArchitecture union - @dbwiddis.
    • #1118: Fix passing unions containing integer and floating point members as parameters by value - @matthiasblaesing.

    πŸš€ Release 5.4.0

    πŸ”‹ Features

    • πŸ—„ #1105: Deprecate c.s.j.p.win32.Advapi32Util.EventLogRecord#getEventId in favor of #getInstanceId - @dbwiddis.
    • 🏁 #1097: Allow .ocx as extension of native libraries on windows - @dmigowski.
    • 🐎 #1108: Improve performance of c.s.j.Structure#newInstance by iteration available constructors instead of exception handling @bjorndarri.

    πŸ› Bug Fixes

    πŸš€ Release 5.3.1

    πŸ› Bug Fixes

    • #1089: c.s.j.internal.ReflectionUtils accesses java.lang.invoke.MethodType without reflection, causing java.lang.NoClassDefFoundError on android API level < 26 - @matthiasblaesing.
    • #1087: Fix wrong calls to Structure#toArray with zero sized arrays - @matthiasblaesing.

    πŸš€ Release 5.3.0

    πŸ”‹ Features

    • ⏱ #1058: Add selectable timeout to stopService() and improve timeout handling - @keithharp.
    • πŸ‘ #1050: Add c.s.j.p.win32.VersionHelpers and supporting functions - @dbwiddis.
    • 🐎 #1061: replace toArray(new T[size]) with toArray(new T[0]) for better performance - @hc-codersatlas.
    • πŸ‘ #1064: Add c.s.j.p.win32.Kernel32.GetLogicalProcessorInformationEx function, convenience Util method and supporting structures - @dbwiddis.
    • πŸ‘ #1065: Add c.s.j.p.win32.PowrProf#CallNTPowerInformation and supporting structures - @dbwiddis.
    • ✨ #1063: Enhance c.s.j.p.win32.User32 and associated classes to support keyboard related functionality. - @kevemueller.
    • #1068: c.s.j.p.win32.Advapi32Util.getAccountBySid(String systemName, PSID sid) ignored parameter instead of passing it to the native function - @nirud.
    • 0️⃣ #813: Support for default methods on interfaces (experimental) - @matthiasblaesing.
    • πŸ‘ #1073: Support COM setters with multiple parameters using c.s.j.p.win32.COM.util.ProxyObject - @matthiasblaesing.
    • πŸ‘ #1083: Prevent access to unsupported values in c.s.j.p.win32.COM.WbemcliUtil#enumerateProperties and bind c.s.j.p.win32.COM.Wbemcli.IWbemClassObject.GetNames - @matthiasblaesing.

    πŸ› Bug Fixes

    • #1052, #1053: WinXP compatibility for c.s.j.p.win32.PdhUtil - @dbwiddis.
    • 🐧 #1055: Include c.s.j.p.linux in OSGi bundle. - @dbwiddis.
    • #1066: On AIX OpenJDK differs from IBM J9 in the mapping of library names. While J9 maps jnidispatch to libjnidispatch.a, OpenJDK maps to libjnidispatch.so, which causes the native library extractor to fail. AIX is now hard-coded to libjnidispatch.a - @matthiasblaesing.
    • #1079: Fix maximum structure alignment for Android i386 - @BugsBeGone.

    πŸš€ Release 5.2.0

    πŸ”‹ Features

    πŸ› Bug Fixes

    • πŸ‘» #1036: Advapi32Util.registryValueExists called on non existing key raises exception instead of returning false - @matthiasblaesing.
    • 0️⃣ #384: Android only supports loading libraries through the JVM System#loadLibrary mechanism, defaulting jna.nosys to true disabled that code path - @matthiasblaesing.
    • #1041: Avoid IllegalArgumentException when reading xattrs with zero length - @jrobhoward.
    • #1042: c.s.j.p.WindowUtils.W32WindowUtils.getProcessFilePath(HWND) does not close process handle - @matthiasblaesing.
    • #1044: Fix field order for c.s.j.p.unix.X11.XResizeRequestEvent - @matthiasblaesing.

    πŸš€ Release 5.1.0

    πŸ”‹ Features

    • 🐧 #1029: Add statvfs to c.s.j.platform.linux.LibC - @dbwiddis.
    • πŸ—„ #1032: Deprecate c.s.j.platform.win32.COM.util.annotation.ComEventCallback in favour of c.s.j.platform.win32.COM.util.annotation.ComMethod - @matthiasblaesing.
    • 🐧 #1021: Added com.sun.jna.platform.linux.XAttr and com.sun.jna.platform.linux.XAttrUtil JNA wrapper for <sys/xattr.h> for Linux - @wilx.
    • #381: Bind c.s.j.p.win32.Secur32#CompleteAuthToken - @matthiasblaesing.

    πŸ› Bug Fixes

    πŸš€ Release 5.0.0

    πŸ”‹ Features

    • πŸ“‡ #975: Add package versions to OSGi metadata. - @io7m.
    • 🏁 #915: Adding interfaces to call to Cryptui and Crypt32 windows libraries and adding related structures to Wincrypt. - @rosh89.
    • πŸ‘» #903: Carry HRESULT in c.s.j.p.win32.COM.COMException, introduce c.s.j.p.win32.COM.COMInvokeException as subclass of COMException for exception as the result of a IDispatch#Invoke. The EXECPINFO is unwrapped into fields in the COMInvokeException and correctly freed. - @matthiasblaesing.
    • πŸ‘€ #822: Native#loadLibrary requires that the interface class passed in is an instance of Library. The runtime check can be enhanced by using a constraint generic. This breaks binary compatibility (see notes below) - @d-noll.In a followup, the original loadLibrary methods were deprecated and Native#load methods were introduced, that hold the new generic definitions. So this change is now binary compatible.
    • #889: The Structure#newInstance receive the target type as a parameter. This adds a limited generic type, so that the return type ist the target type and not a generic structure, removing the necessity to do an explizit cast - @matthiasblaesing.
    • #913: Add @ComInterface annotation to com.sun.jna.platform.win32.COM.util.IConnectionPoint to make it possible to retrieve it via IUnknown#queryInterface - @matthiasblaesing.
    • #797: Binding Advapi32#EnumDependendServices, Advapi32#EnumServicesStatusEx and Advapi32#QueryServiceStatus. W32Service#stopService was modified to be more resilent when stopping service - @matthiasblaesing.
    • Bind com.sun.jna.platform.win32.Kernel32.ExpandEnvironmentStrings and add helper method for it as Kernel32Util#expandEnvironmentStrings - @matthiasblaesing.
    • #935: Add RegConnectRegistry to Advapi32 mappings. - @cxcorp.
    • πŸ‘ #947: Allow retrieval of ACEs from com.sun.jna.platform.win32.WinNT.ACL even if the contained ACE is not currently supported - @jrobhoward.
    • #954: Add c.s.j.Structure.FieldOrder annotation to define the field order of a structures without implementing Structure#getFieldOrder() - @idosu.
    • #959: Added GetProcessTimes and GetProcessIoCounters to com.sun.jna.platform.win32.Kernel32 - @dbwiddis.
    • πŸš€ #952: Added CreateMutex, OpenMutex and ReleaseMutex to com.sun.jna.platform.win32.Kernel32 - @matthiasblaesing.
    • #973: Added PdhLookupPerfNameByIndex, PdhLookupPerfIndexByName, and PdhEnumObjectItems to c.s.j.platform.win32.Pdh and a c.s.j.platform.win32.PdhUtil class to access them - @dbwiddis.
    • #980: Added PERF_OBJECT_TYPE, PERF_COUNTER_BLOCK, and PERF_COUNTER_DEFINITION to c.s.j.platform.win32.WinPerf and added Pointer constructors to `PERF_INSTANCE_DEFINITION and PERF_DATA_BLOCK - @dbwiddis.
    • πŸ–¨ #981: Added WTS_PROCESS_INFO_EX, WTSEnumerateProcessesEx, and WTSFreeMemoryEx to c.s.j.platform.win32.Wtsapi32 - @dbwiddis.
    • #983: Added GetIfEntry, GetIfEntry2, and GetNetworkParams and supporting structures MIB_IFROW, MIB_IF_ROW2, and FIXED_INFO to c.s.j.platform.win32.IPHlpAPI.java - @dbwiddis.
    • #984: Added CM_Locate_DevNode, CM_Get_Parent, CM_Get_Child, CM_Get_Sibling, CM_Get_Device_ID, and CM_Get_Device_ID_Size to c.s.j.platform.win32.Cfgmgr32.java and a c.s.j.platform.win32.Cfgmgr32Util class for CM_Get_Device_ID - @dbwiddis.
    • #988: Added PdhLookupPerfIndexByEnglishName to c.s.j.platform.win32.PdhUtil - @dbwiddis.
    • 🏁 #992: Improve stability of windows tests and add appveyor configuration for windows CI builds - @matthiasblaesing.
    • #995: Added structures and methods to c.s.j.platform.mac.SystemB for Process, Network interface, Swapfile, Time, and Filesystem info - @dbwiddis.
    • 🐧 #997: Added Sysinfo structure and function to c.s.j.platform.linux.LibC - @dbwiddis.
    • πŸ”’ #1001: Added overloads to c.s.j.platform.win32.Advapi32Util methods which allow the caller to specify samDesiredExtra to request additional registry key security and access rights - @camw.
    • πŸ“¦ #1007: Added OSGi export of Solaris package - @swimmesberger.
    • #1003: Allow NativeMapped to be used with enums - @koraktor.
    • #994: Added CoInitializeSecurity and CoSetProxyBlanket to c.s.j.platform.win32.Ole32, added new c.s.j.platform.win32.Wbemcli classes needed to query WMI, and added a WbemcliUtil class implementing WMI queries. - @dbwiddis.
    • #1013: Add automatic module name entries to manifest of jna and jna-platform - @matthiasblaesing.
    • #985: Improve handling of dynamicaly extracted native library. On Mac OS X systems ~/Library/Application Support/JNA/temp and on other Unix like systems $XDG_CACHE_DIR/JNA/temp (Default value is: ~/.cache/JNA/temp) is used - @matthiasblaesing.
    • Bind com.sun.jna.platform.win32.Kernel32#ExitProcess - @Groostav.

    πŸ› Bug Fixes

    • πŸ”’ #652: Dead Lock in class initialization - @matthiasblaesing.
    • πŸ“¦ #843: Correctly bind com.sun.jna.platform.win32.SecBufferDesc and add convenience binding as com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc. Bind SSPI functions InitializeSecurityContext, AcceptSecurityContext, QueryCredentialsAttributes, QuerySecurityPackageInfo, EncryptMessage, DecryptMessage, MakeSignature, VerifySignature in com.sun.jna.platform.win32.Secur32 - @matthiasblaesing.
    • #863: Fix ARM softfloat/hardfloat detection by modifying armSoftFloat condition in ELFAnalyser. Before this fix a softfloat binary could be misdetected as hardfloat. - @kunkun26.
    • #867: Fix memory leak in COMLateBindingObject#getStringProperty - @matthiasblaesing.
    • #871: Fix mapping of libc function gethostname, sethostname, getdomainname and setdomainname and bind com.sun.jna.platform.win32.Winsock2.gethostname(byte[], int) - @matthiasblaesing.
    • βͺ #876: Restore java 6 compatibility - @matthiasblaesing.
    • #882: Correctly close file in ELFAnalyser#runDetection, fix suggested by @Sylvyrfysh in #880 - @matthiasblaesing.
    • 🚚 #887: MacFileUtils.moveToTrash() doesn't work in a sandboxed app fix suggested by @sobakasu - @matthiasblaesing.
    • #894: NullPointerException can be caused by calling com.sun.jna.platform.win32.COM.util.ProxyObject#dispose multiple times - @matthiasblaesing.
    • ⚑️ #925: Optimize Structure#validate and prevent ArrayIndexOutOfBoundsException in SAFEARRAY#read for zero dimensions - @matthiasblaesing.
    • #340: Guard registry handling against out-of-bounds reads by ensuring all read strings are NULL terminated - @matthiasblaesing.
    • πŸ— #902: Allow building JNA on JDK 10. javah was removed from the JDK and javac is now used to create the necessary headers. JNA now has JDK 8 as the minimum build version, at runtime Java 6 is the minimum version. Native code for platforms with a JDK version lower than 8 can still be build by (demonstrated for Solaris x86): Run ant -Dbuild.os.name=SunOS -Dbuild.os.arch=x86 native-build-package Transfer the build/build-package-sunos-x86-5.2.1.zip file to the target system. The file holds the native sources, the necessary headers and and a shell script for the build. Expand the zip on the target system. Setup JAVA_HOME to point to the JDK sources. Change into the expanded directory and run bash build.sh. The resulting sunos-x86.jar is copied back to the original build system to lib/native/sunos-x86.jar - @matthiasblaesing.
    • ⚑️ #958: Update for PR 863: Old toolchains produce binaries without hard-/softfloat markers. Rasbian is missing the markers and the oracle JDK is also affected. For hardfloat detection now also the Arm EABI section is also considered - @matthiasblaesing.
    • #974: If the callback code failed to attach to the JVM, this lead to a segfault. The success of attaching to the JVM was checked to late and an invalid JNIEnv pointer was used to access the JVM - @matthiasblaesing.
    • #1010: Fix binding of lpAccessName parameter of com.sun.jna.platform.win32.Mpr#WNetUseConnection - @matthiasblaesing.
    • 0️⃣ #384: Switch default value for jna.nosys to true. By default then the embedded native library is used - @matthiasblaesing.

    πŸ’₯ Breaking Changes

    • 🚚 com.sun.jna.Pointer#SIZE is removed. Its use is replaced by com.sun.jna.Native#POINTER_SIZE to prevent a class loading deadlock, when JNA is initialized from multiple threads
    • 🚚 com.sun.jna.Pointer#getString(long offset, boolean wide) is removed. It was replaced by com.sun.jna.Pointer#getString(long offset) or com.sun.jna.Pointer#getWideString(long offset)
    • 🚚 com.sun.jna.Pointer#getStringArray(long offset, boolean wide) is removed. It was replaced by com.sun.jna.Pointer#getStringArray(long offset) or com.sun.jna.Pointer#getWideStringArray(long offset)
    • 🚚 com.sun.jna.Pointer#setString(long offset, String value, boolean wide) is removed. It was replaced by com.sun.jna.Pointer#setString(long offset, String value) or com.sun.jna.Pointer#setWideString(long offset, String value)
    • 🚚 com.sun.jna.Structure#setFieldOrder is removed. It was replaced by com.sun.jna.Structure#getFieldOrder and threw an java.lang.Error on call.
    • 🚚 com.sun.jna.Native#parseVersion was removed without replacement
    • com.sun.jna.Native#setPreserveLastError and com.sun.jna.Native#getPreserveLastError were removed without replacement. They were turned into NOOPs in the past.
    • com.sun.jna.Native#getDirectByteBuffer was replaced by com.sun.jna.Pointer#getByteBuffer
    • the parameters of the methods gethostname, sethostname, getdomainname and setdomainname in the interface com.sun.jna.platform.unix.LibCAPI were changed from (char[] name, int len) to (byte[] name, int len)
    • com.sun.jna.Platform#isAix was replaced by com.sun.jna.Platform#isAIX
    • com.sun.jna.platform.win32.Sspi.SecBufferDesc was incompatibly changed to match the correct native semantics. SecBufferDesc describing more than one buffer were broken. For most usecases com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc is the best alternative.
    • com.sun.jna.platform.win32.WinBase.FILETIME#toLong() was replaced by com.sun.jna.platform.win32.WinBase.FILETIME#toTime()
    • com.sun.jna.platform.win32.Variant#COM_DAYS_ADJUSTMENT was removed
    • com.sun.jna.platform.win32.Variant#MICRO_SECONDS_PER_DAY was removed
    • 🚚 com.sun.jna.platform.win32.Variant.VARIANT#toJavaDate was removed
    • 🚚 com.sun.jna.platform.win32.Variant.VARIANT#fromJavaDate was removed
    • com.sun.jna.platform.win32.User32#MonitorFromPoint(Point pt, int dwFlags) was replaced by com.sun.jna.platform.win32.User32#MonitorFromPoint(Point.ByValue pt, int dwFlags)
    • com.sun.jna.platform.win32.OleAuto.LoadTypeLib(WString, PointerByReference) was replaced by com.sun.jna.platform.win32.OleAuto.LoadTypeLib(String, PointerByReference)
    • com.sun.jna.platform.win32.Kernel32Util.formatMessageFromHR(HRESULT) was replaced by com.sun.jna.platform.win32.Kernel32Util.formatMessage(HRESULT)
    • com.sun.jna.platform.win32.COM.COMException was structurally modified. The pExcepInfo and puArgErr members were removed and hresult member was added. The now missing information in COMException was moved to COMInvokeException.
    • The third parameter of com.sun.jna.platform.win32.COM.IShellFolder#GetDisplayNameOf was changed from PointerByReference to STRRET and matching this, the first parameter of com.sun.jna.platform.win32.Shlwapi.StrRetToStr was changed identically.
    • ACE_HEADER replaces ACEStructure as the base class for ACEs. com.sun.jna.platform.win32.WinNT.ACL was modified to support ACLS, that contain ACEs other than ACCESS_ALLOWED_ACE_TYPE and ACCESS_DENIED_ACE_TYPE by widening the return type of getACEStructures to ACE_HEADER[] and renaming the method to getACEs. In consequence com.sun.jna.platform.win32.Advapi32Util#getFileSecurity was changed similarly. The SID accessors getSidString and getSID were moved from ACEStructure to ACCESS_ACEStructure.
    • com.sun.jna.platform.win32.Ole32#CoCreateGuid(GUID.ByReference pguid) was replaced by com.sun.jna.platform.win32.Ole32#CoCreateGuid(GUID pguid) and com.sun.jna.platform.win32.Ole32#CLSIDFromString(WString lpsz, CLSID.ByReference pclsid) was replaced by com.sun.jna.platform.win32.Ole32#CLSIDFromString(String lpsz, CLSID.ByReference pclsid)

    πŸš€ Release 4.5.0

    πŸ”‹ Features

    • #774: Addition win32 api : SendMessage, GetActiveWindow, COPYDATASTRUCT and a few constants + a demo application - @cnico.
    • 0️⃣ #783: Add Ole32 functions: OleBuildVersion, OleInitialize, OleUninitialize, OleFlushClipboard, OleRun, add VARIANT conversion functions to OleAuto, add default locale, LCID and LANG to WinNT - @matthiasblaesing.
    • #784: Added Solaris Kstat library - @dbwiddis.
    • πŸ‘ #805: Provide a way to pass JNIEnv pointer to native method and support OPTION_ALLOW_OBJECTs for direct mapping - @ncruces.
    • πŸ‘ #816: Support boolean[] in direct mapping - @ncruces.
    • 🐧 #827: Add support for linux-mips64el - @all7.
    • 🐧 #845: Add support for linux-s390x - @matthiasblaesing.
    • 🐧 #771: Rebuild native libraries for linux-x86 and linux-x86-64 with an against an older GLIBC (minimum version of glibc for these architectures is now 2.7) - @matthiasblaesing.
    • #821: Move windows service related functions and structures in ntservice sample project to com.sun.jna.platform.win32.Advapi32: StartServiceCtrlDispatcher, RegisterServiceCtrlHandler, RegisterServiceCtrlHandlerEx, SetServiceStatus, CreateService, DeleteService and com.sun.jna.platform.win32.Winsvc: Handler, HandlerEx, SERVICE_MAIN_FUNCTION, SERVICE_TABLE_ENTRY, SERVICE_DESCRIPTION, SERVICE_STATUS_HANDLE - @matthiasblaesing.

    πŸ› Bug Fixes

    • #776: Do not include ClassPath attribute in MANIFEST.MF of jna-platform. - @matthiasblaesing.
    • #785: OaIdlUtil#toPrimitiveArray fails if dimension bounds are not 0-based - @matthiasblaesing.
    • 🏁 #795: com.sun.jna.platform.win32.WinDef.WORDByReference holds a WORD which is defined to 16 bit on windows, so it needs to be accessed as short (getShort()). Fix suggested by - @kdeines.
    • #804 Main-Class in jna-platform.jar collides with java 9 module system - @matthiasblaesing.
    • #838: Fix binding of com.sun.jna.platform.win32.User32#MonitorFromPoint - @matthiasblaesing.
    • 0️⃣ #834: Declare structure members of LPPRINTER_DEFAULTS as public - @matthiasblaesing.

    πŸš€ Release 4.4.0

    πŸ”‹ Features

    πŸ› Bug Fixes

    πŸš€ Release 4.3.0

    πŸ”‹ Features

    • 🏁 #526: Added initialization and conversion between Windows SYSTEMTIME and Java Calendar - @lgoldstein.
    • #532: Added com.sun.jna.platform.win32.Mpr, com.sun.jna.platform.win32.LmShare, and com.sun.jna.platform.win32.Winnetwk - @amarcionek.
    • #532: Added ACCESS_* definitions to com.sun.jna.platform.win32.LmAccess - @amarcionek.
    • #532: Added NetShareAdd and NetShareDel to com.sun.jna.platform.win32.Netapi32 - @amarcionek.
    • #535: Added CreateProcessWithLogonW to com.sun.jna.platform.win32.Advapi32 - @mlfreeman2.
    • #535: Added CertAddEncodedCertificateToSystemStore to com.sun.jna.platform.win32.Crypt32 - @mlfreeman2.
    • #535: Added BitBlt to com.sun.jna.platform.win32.GDI32, Added com.sun.jna.platform.win32.GDI32Util and added getScreenshot() to it - @mlfreeman2.
    • #535: Added SHEmptyRecycleBin, ShellExecuteEx to com.sun.jna.platform.win32.Shell32 - @mlfreeman2.
    • #535: Added GetDesktopWindow to com.sun.jna.platform.win32.User32 - @mlfreeman2.
    • 🏁 #540: Added Missing Windows kernel32 method: QueryFullProcessImageName - @yossieilaty.
    • πŸ”’ #543: Added ProcessIdToSessionId, LoadLibraryEx, FreeLibrary and Find/Load/Lock/SizeofResource to com.sun.jna.platform.win32.Kernel32 - @mlfreeman2.
    • #545: Added EnumResourceTypes and EnumResourceNames to com.sun.jna.platform.win32.Kernel32 - @mlfreeman2.
    • #547: Added GetSystemTimes to com.sun.jna.platform.win32.Kernel32 - @dbwiddis.
    • #548: Return 64-bit unsigned integer from com.sun.jna.platform.win32.WinBase.FILETIME - @dbwiddis.
    • 🏁 #524: Added IShellFolder interface plus necessary utility functions to Windows platform, and a sample for enumerating objects in My Computer - @lwahonen.
    • #471: Determine size of native bool - @twall.
    • #484: Added XFetchName to X11 interface - @pinaf.
    • #554: Initial code for a few Unix 'libc' API(s) @lgoldstein
    • #552: Added Module32FirstW and Module32NextW to com.sun.jna.platform.win32.Kernel32 (and helper to com.sun.jna.platform.win32.Kernel32Util) and MODULEENTRY32W structure to com.sun.jna.platform.win32.Tlhelp32 - @mlfreeman2.
    • #564: Use generic definition of Native#loadLibrary @lgoldstein
    • πŸ— #562: Added com.sun.jna.platform.win32.VersionUtil with getFileVersionInfo utility method to get file major, minor, revision, and build version parts - @mlfreeman2.
    • #563: Added com.sun.jna.platform.win32.Wininet with the following 4 methods: FindFirstUrlCacheEntry, DeleteUrlCacheEntry, FindCloseUrlCache, FindNextUrlCacheEntry, and the INTERNET_CACHE_ENTRY_INFO structure, and a helper in com.sun.jna.platform.win32.WininetUtil for parsing WinInet's cache - @mlfreeman2.
    • πŸ–¨ #567: Added PrintWindow, IsWindowEnabled, IsWindow, FindWindowEx, GetAncestor, GetCursorPos, SetCursorPos, SetWinEventHook, UnhookWinEvent, CopyIcon, and GetClassLong to com.sun.jna.platform.win32.User32 and supporting constants to com.sun.jna.platform.win32.WinUser - @mlfreeman2.
    • #573: Added EnumProcessModules, GetModuleInformation, and GetProcessImageFileName to com.sun.jna.platform.win32.Psapi and added ExtractIconEx to com.sun.jna.platform.win32.Shell32 - @mlfreeman2.
    • #574: Using static final un-modifiable List of field names for structure(s) - @lgoldstein.
    • #577: Apply generic definitions wherever applicable - @lgoldstein.
    • #569: Added com.sun.jna.platform.win32.Winspool.PRINTER_INFO_2 support. Added GetPrinter and ClosePrinter functions in com.sun.jna.platform.win32.Winspool - @IvanRF.
    • πŸ–¨ #583: Added printer attributes and status - @IvanRF.
    • #589: Use com.sun.jna.MethodResultContext in direct mapping (as done in interface mapping) - @marco2357.
    • #595: Allow calling COM methods/getters requiring hybrid calling (METHOD+PROPERTYGET) - @matthiasblaesing.
    • πŸ— #582: Mavenize the build process - Phase 1: building the native code via Maven - @lgoldstein.
    • #606: Added Kernel32Util method to facilitate checking that calls to LocalFree/GlobalFree are successful - @lgoldstein.
    • #612: Kernel32Util.freeLocalMemory()/Kernel32Util.freeGlobalMemory() always throw com.sun.jna.platform.win32.Win32Exception if failed - @lgoldstein.
    • πŸ— #608: Mavenize the build process - change parent and native pom artifactId/name to differentiate in IDE and build tools. - @bhamail
    • #613: Make com.sun.jna.platform.win32.Win32Exception extend com.sun.jna.LastErrorException - @lgoldstein.
    • #614: Added standard com.sun.jna.platform.win32.Kernel32Util.closeHandle() method that throws a com.sun.jna.platform.win32.Win32Exception if failed to close the handle - @lgoldstein.
    • πŸ›  #618: Implement SAFEARRAY access and bugfix VARIANT - @matthiasblaesing.
    • #616: Allow access to base interfaces (most important IDispatch) via ProxyObject and improve binding by allowing to use dispId for the call - @matthiasblaesing.
    • #621: Added TYPEFLAGS-constants for wTypeFlags in com.sun.jna.platform.win32.OaIdl.TYPEATTR - @SevenOf9Sleeper.
    • #625: Make conversion to/from java to/from VARIANT in com.sun.jna.platform.win32.COM.util.Convert more flexible and dependable - @matthiasblaesing.
    • #639: Add getloadavg() to OS X and Unix - @dbwiddis.
    • 🐎 #640: Add com.sun.jna.platform.win32.Psapi.GetPerformanceInfo(), com.sun.jna.platform.win32.Kernel32.GetTickCount64(), and com.sun.jna.platform.win32.Kernel32.SetErrorMode() - @dbwiddis.
    • πŸ‘ #642: COM calls with variable number of arguments (varargs) are now supported - @SevenOf9Sleeper.
    • #644: New ant target 'install' for installing JNA artifacts in local m2-repository - @SevenOf9Sleeper.
    • πŸ›  #649: Bugfix msoffice sample and add two samples taken from MSDN and translated from VisualBasic to Java - @matthiasblaesing.
    • πŸ‘ #654: Support named arguments for com.sun.jna.platform.win32.COM.util.CallbackProxy based callbacks - @matthiasblaesing.
    • #659: Enable LCID (locale) override for com.sun.jna.platform.win32.COM.util.ProxyObject-based COM calls - @matthiasblaesing.
    • #665: Added XSetWMProtocols and XGetWMProtocols to com.sun.jna.platform.unix.X11 - @zainab-ali.
    • #667: Added SetFileSecurity, GetSecurityInfo and SetSecurityInfo to com.sun.jna.platform.win32.Advapi32 - @amarcionek.
    • #667: Added NtSetSecurityObject and NtQuerySecurityObject to com.sun.jna.platform.win32.NtDll - @amarcionek.
    • 🏁 #680: Added SetCurrentProcessExplicitAppUserModelID and GetCurrentProcessExplicitAppUserModelID to com.sun.jna.platform.win32.Shell32 for setting the System.AppUserModel.ID of the host process - @rednoah.
    • 🏁 #693: Bind DDEML (Dynamic Data Exchange Management Library), add a thread implementation that runs a windows message loop - @matthiasblaesing.
    • #702: Added GetClientRect to com/sun/jna/platform/win32/User32 - @Jonatino.
    • #689: Add GetProcAddress(HMODULE, int) to com.sun.jna.platform.win32.Kernel32 - @matthiasblaesing.
    • #723: Added com.sun.jna.platform.win32.Wevtapi and com.sun.jna.platform.win32.Winevt - @sakamotodesu.
    • #720: Added SetThreadExecutionState to com.sun.jna.platform.win32.Kernel32 - @matthiasblaesing.
    • #738: Added GetSecurityDescriptorOwner, SetSecurityDescriptorOwner, GetSecurityDescriptorGroup, SetSecurityDescriptorGroup, GetSecurityDescriptorControl, SetSecurityDescriptorControl, GetSecurityDescriptorDacl, SetSecurityDescriptorDacl, MakeSelfRelativeSD, MakeAbsoluteSD, EqualSid, InitializeSecurityDescriptor, InitializeAcl, AddAce, AddAccessAllowedAce, AddAccessAllowedAceEx, and GetAce to `com.sun.jna.platform.win32.Advapi32 - @amarcionek.
    • #738: Added RtlNtStatusToDosError to `com.sun.jna.platform.win32.NtDll - @amarcionek.
    • #732: Added com.sun.jna.platform.win32.WinioctlUtil for help in determining FSCTL_* codes - @amarcionek.
    • πŸ“œ #732: Added com.sun.jna.platform.win32.Ntifs with Reparse Point structures and defines - @amarcionek.
    • #732: Added initialization of FILETIME from LARGE_INTEGER - @amarcionek.
    • #732: Added GetFileInformationByHandleEx and SetFileInformationByHandle to com.sun.jna.platform.win32.Kernel32 - @amarcionek.
    • #740: Modified com.sun.jna.platform.win32.WinioctlUtil for simplicity dealing with FSCTL_* codes - @amarcionek.
    • #745: Added Secur32#QueryContextAttributes - @barney2k7.

    πŸ› Bug Fixes

    • πŸ›  #549: Fixed bug in types derived from XID - @twall.
    • πŸ›  #536: Fixed bug in determining the Library and options associated with types defined outside of a Library - @twall.
    • #531: Ensure direct-mapped callbacks use the right calling convention - @twall.
    • #566: Fix return type of Native#loadLibrary to match unconstrained generic @lgoldstein.
    • #584: Promote float varargs to double - @marco2357.
    • #588: Fix varargs calls on arm - @twall.
    • #593: Improve binding of TypeLib bindings - @matthiasblaesing.
    • #578: Fix COM CallbackHandlers, allow usage of VARIANTs directly in c.s.j.p.w.COM.util.ProxyObject and fix native memory leak in c.s.j.p.w.COM.util.ProxyObject - @matthiasblaesing
    • 🚚 #601: Remove COMThread and COM initialization from objects and require callers to initialize COM themselves. Asserts are added to guard correct usage. - @matthiasblaesing.
    • πŸš€ #602: Make sure SID related memory is properly released once no longer required @lgoldstein.
    • πŸ›  #610: Fixed issue #604: Kernel32#GetLastError() always returns ERROR_SUCCESS @lgoldstein.
    • βͺ #633: Restore default usage of platform native encoding for Java strings passed to native functions (was hard-coded to UTF-8 in 4.0 and later) @amake
    • #634: Improve BSTR handling and add SysStringByteLen and SysStringLen to com.sun.jna.platform.win32.OleAuto - @matthiasblaesing.
    • #646: platform.win32.COM.COMBindingBaseObject swallows reason if instantiation fails - @matthiasblaesing.
    • ⚑️ #674: Update references to Apache License as requested by issue #673 @bhamail
    • πŸ— #636: Staticly link visual c++ runtime when building with MSVC - @matthiasblaesing.
    • #624: WinDef.DWORD getLow() & getHigh() using incorrect bit mask - @matthiasblaesing.
    • #668: Correct typemapper used for structures defined in com.sun.jna.platform.win32.DsGetDC, com.sun.jna.platform.win32.LMAccess, com.sun.jna.platform.win32.LMShare, com.sun.jna.platform.win32.Sspi, com.sun.jna.platform.win32.WinBase, com.sun.jna.platform.win32.WinCrypt, com.sun.jna.platform.win32.WinUser and com.sun.jna.platform.win32.Winnetwk - @matthiasblaesing.
    • #696: COMLateBindingObject.getAutomationProperty method that takes iDispatch parameter doesn't use it - @matthiasblaesing.
    • #664: Prevent premature GC of Pointer and Function objects by passing whole object into JNI call in addition to the raw pointer value - @matthiasblaesing.
    • 🐧 #669: Ensure XSI-compliant strerror_r is used, to prevent corrupted error messages on linux - @DavidKeller.
    • 🚚 #697: Ensure disposed memory is removed from Memory#allocatedMemory map - @matthiasblaesing.
    • πŸ— #731: Require mingw-w64 instead of mingw as the alternative to the MSVC build - @matthiasblaesing.
    • #747: - Call Native.toString() in #getFileName() and #getAlternateFileName() in c.s.j.p.win32.WinBase instead of custom NUL terminator logic - @jhult.

    πŸš€ Release 4.2.1

    πŸ”‹ Features

    • 🐧 #504: Add support for linux-sparcv9 - @alexvsimon.
    • #510: Added GetCommState, GetCommTimeouts SetCommState and SetCommTimeouts to com.sun.jna.platform.win32.Kernel32. Added DCB structure to com.sun.jna.platform.win32.WinBase - @MBollig.
    • #512: Make loading debug flags mutable @lwahonen.
    • πŸ–¨ #514: Added host_processor_info to com.sun.jna.platform.mac.SystemB - @dbwiddis.
    • #519: Added JNA functional overview - @twall.
    • #528: Added idea-jar ant task that creates a convenience jar that contains all native dispatch libraries - @lwahonen.

    πŸ› Bug Fixes

    • ⚑️ #515: Update linux-arm natives omitted in 4.2 @twall.

    πŸš€ Release 4.2

    πŸ”‹ Features

    • #452: Added Mac OS X System.B library at com.sun.jna.platform.mac.SystemB including support for sysctl, sysctlbyname, sysctlnametomib, mach_host_self, host_page_size, host_statistics and host_statistics64 - @dbwiddis.
    • #446: Added com.sun.jna.platform.win32.Advapi32.GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityDescriptorLength, IsValidSecurityDescriptor, IsValidAcl - @amarcionek.
    • #387: Use of interfaces and annotations to provide easier implementation of COM interfaces (with InvocationHandler) - @dhakehurst.
    • πŸ‘ #387: Support for COM event callbacks - @dhakehurst.
    • πŸ‘ #387: Support for COM interface discovery by iteration over RunningObjectTable - @dhakehurst.
    • ⚑️ Updated AIX natives and build - @twall.
    • #290: Improved the stacktrace for the exceptions thrown by com.sun.jna.Structure - @ebourg.
    • πŸ”§ #332: Added Win32 Monitor Configuration API in com.sun.jna.platform.win32.Dxva2 - @msteiger.
    • βž• Added Winspool monitor sample and updated Kernel32, WinBase, Winspool - @wolftobias.
    • #333: Added CoTaskMemAlloc, CoTaskMemRealloc and CoTaskMemFree to com.sun.jna.platform.win32.Ole32 - @msteiger.
    • #334: Added com.sun.jna.platform.win32.Shell32.SHGetKnownFolderPath and KnownFolders GUID constants - @msteiger.
    • #338: Added com.sun.jna.platform.mac.XAttr and com.sun.jna.platform.mac.XAttrUtil JNA wrapper for <sys/xattr.h> for Mac OS X - @rednoah.
    • 🏁 #339: Added GetWindowPlacement, SetWindowPlacement, AdjustWindowRect, AdjustWindowRectEx, ExitWindowsEx, and LockWorkstation to com.sun.jna.platform.win32.User32 - @Timeroot.
    • #286: Added CreateRemoteThread, WritePocessMemory and ReadProcessMemory to com.sun.jna.platform.win32.Kernel32 - @sstokic-tgm.
    • 🏁 #350: Added jnacontrib.x11.api.X.Window.getSubwindows - @rm5248.
    • πŸ‘Œ Improved contrib/msoffice sample - @wolftobias.
    • 🐎 #352: Performance improvements due to reduced locking in com.sun.jna.Library$Handler and fewer vararg checks in com.sun.jna.Function - @Boereck.
    • 🐎 #353: Performance improvements by improved collaboration between com.sun.jna.Library$Handler and com.sun.jna.Function - @Boereck.
    • #357: Added com.sun.jna.platform.win32.Kernel32.SetSystemTime - @lgoldstein, @thomasjoulin.
    • πŸ’» #365: Added com.sun.jna.platform.win32.Kernel32.GetComputerNameEx support - @lgoldstein.
    • #368: Added com.sun.jna.platform.win32.Kernel32.VirtualQueryEx, com.sun.jna.platform.win32.WinNT.MEMORY_BASIC_INFORMATION and MEM_COMMIT, MEM_FREE, MEM_RESERVE, MEM_IMAGE, MEM_MAPPED, MEM_PRIVATE constants - @apsk.
    • πŸ‘ Allow interoperation with JNI revision changes - @twall.
    • #376: Added com.sun.jna.VarArgsChecker for faster vararg checks. Used in com.sun.jna.Function - @Boereck.
    • πŸ‘€ #391: Added com.sun.jna.platform.win32.Advapi3.EncryptFile, DecryptFile, FileEncryptionStatus, EncryptionDisable, OpenEncryptedFileRaw, ReadEncryptedFileRaw, WriteEncryptedFileRaw, and CloseEncryptedFileRaw with related Advapi32Util helpers - @khalidq.
    • 🏁 #400: Added com.sun.jna.platform.WindowUtils.getAllWindows, getWindowIcon, getIconSize, getWindowTitle, getPRocessFilePath and getWindowLocationAndSize - @PAX523.
    • #400: Added com.sun.jna.platform.win32.Kernel32Util.getLastErrorMessage - @PAX523.
    • #400: Added com.sun.jna.platform.win32.GDI32.GetObject - @PAX523.
    • #400: Added com.sun.jna.platform.win32.Psapi.GetModuleFileNameEx- @PAX523.
    • #400: Added com.sun.jna.platform.win32.User32.GetIconInfo, SendMessageTimeout and GetClassLongPtr - @PAX523.
    • #400: Added com.sun.jna.platform.win32.WinGDI.ICONINFO and BITMAP - @PAX523.
    • #400: Added process-specific access rights constants in com.sun.jna.platform.win32.WinNT - @PAX523.
    • #400: Added specific constants for request of icon settings in com.sun.jna.platform.win32.WinUser - @PAX523.
    • #400: Added constants for GetClassLong, SendMessageTimeout and GetIconInfo in com.sun.jna.platform.win32.WinUser - @PAX523.
    • #419: Added SetupDiOpenDevRegKey , SetupDiEnumDeviceInfo and related constants to com.sun.jna.platform.win32.SetupApi - @ChristianSchwarz.
    • #421: Added XGrabKeyboard and XUngrabKeyboard to X11 interface - @pinaf.
    • ⚑️ #422: Update libffi to v3.2.1 - @tdaitx.
    • πŸ‘ #425: Add support for PPCLE - @tdaitx.
    • #428: Added Wincon.h related functions and definitions to com.sun.jna.platform.win32.Kernel32 - @lgoldstein.
    • #430: Add android aarch64, x86-64, mips, and mips64 targets - @twall.
    • πŸ‘ #431: Added named pipe API support to com.sun.jna.platform.win32.Kernel32 - @lgoldstein.
    • #432: Added com.sun.jna.platform.win32.Kernel32.SetLocalTime - @lgoldstein.
    • #434: Added com.sun.jna.platform.win32.Kernel32.GetEnvironmentStrings - @lgoldstein.
    • 🏁 Loosen OSGI OS name matching to accommodate Windows 8 family - Niels Bertram.
    • #436: Added basic Pdh API implementation to 'com.sun.jna.platform.win32' - @lgoldstein.
    • πŸ‘ #451: Add VARIANT support for CHAR and BYTE - @mitkola.
    • #478: Ask ldconfig for more places to search for libraries - @gohal.
    • #481: Added volume management functions to com.sun.jna.platform.win32 - @lgoldstein.
    • πŸ›  #483: Found and fixed duplicate method definitions for the same API in com.sun.jna.platform.win32 - @lgoldstein.
    • #485: Implemented Comparable interface for many of the base types in com.sun.jna.platform.win32.WinDef - @lgoldstein.
    • #488: Added GetRawInputDeviceList to com.sun.jna.platform.win32.User32 and User32Util - @lgoldstein.
    • #490: Allow arbitrary calling convention specification, including FFI_MS_CDECL which alters handling of struct return values, and multiple Linux/PowerPC conventions - @twall.

    πŸ› Bug Fixes

    • #450: Libraries extracted to temp directory are now cleaned up in case of library loading errors, as well - @aschnab.
    • #319: Fix direct-mapping type-mapped pointer result types - @marco2357.
    • #350: Fix jnacontrib.x11.api.X.Window.getXXXProperty, returns null if the window property is not found - @rm5248.
    • πŸ›  Fixed com.sun.jna.platform.win32.Variant and TlbImp - @wolftobias.
    • πŸ›  Fixed com.sun.jna.Pointer.getWideStringArray not respecting the length parameter - @csoren.
    • πŸ›  Fix missing code in X11 demos - @twall.
    • πŸ›  Fix compiler warnings OSX - @twall.
    • βœ‚ Remove unsupported JAWT from OSX build - @twall.
    • βœ… Disable WebStart tests - @twall.
    • Dispose all native resources when JNA's native library is unloaded - Paul GrΓΌtter, @twall.
    • Weakly hold registered direct-mapped classes - @twall.
    • πŸ›  #382: Fixed memory allocation in com.sun.jna.platform.win32.WTypes.LPWSTR and LPSTR constructors - @junak-michal.
    • πŸ›  Fix publish doc links - @bhamail.
    • #388: Ensure native library always opened with provided flags - @zolyfarkas.
    • #403: Fix com.sun.jna.platform.win32.COM.COMUtils.SUCCEEDED and FAILED - @lwahonen.
    • #404: Fix VARIANT constructors for int, short, and long - @lwahonen.
    • #420: Fix structure leaving always one element in ThreadLocal set - @sjappig.
    • #467: Fix TypeMapper usage with direct-mapped libraries converting primitives to Java objects (specifically enums) - @twall.
    • #475: Avoid modifying native memory in Structure.equals()/hashCode()- @twall.
    • #496: Properly handle direct mapping with type mappers which return String/WString - @twall.

    πŸš€ Release 4.1

    πŸ”‹ Features

    • βž• Added com.sun.jna.platform.win32.Advapi32Util.registryCloseKey - @falldog.
    • πŸ— Enabled platform tests to be run w/o building native bits - @twall.
    • βž• Added COM/Typelib java code generator com.sun.jna.platform.win32.COM.tlb.TlbImp - @wolftobias.
    • #226: Added OSGI information to jna-platform.jar - @brettwooldridge.
    • 🏁 #267: Added support for Windows RAS32 API, com.sun.jna.platform.win32.Rasapi32 and Rasapi32Util - @kc7bfi.
    • πŸ‘ #101: Modify com.sun.jna.platform.win32.Advapi32Util.registryGet* API to support KEY_WOW64 option - @falldog.
    • #271: Added com.sun.jna.platform.win32.Gdi32.ChoosePixelFormat and SetPixelFormat - @kc7bfi.
    • #271: Added com.sun.jna.platform.win32.OpenGL32, OpenGL32Util and WinOpenGL - @kc7bfi.
    • #250: Added com.sun.jna.platform.win32.Kernel32.GetPrivateProfileSection, GetPrivateProfileSectionNames and WritePrivateProfileSection and corresponding Kernel32Util helpers - @quipsy-karg.
    • #287: Added DBTF_MEDIA and DBTF_NET to com.sun.jna.platform.win32.DBT - @daifei4321.
    • #295: Added com.sun.jna.platform.win32.Kernel32.ResetEvent - @manithree.
    • #301: Added accessCheck to com.sun.jna.platform.win32.Advapi32Util, MapGenericMask and AccessCheck to com.sun.jna.platform.win32.Advapi32, PRIVILEGE_SET and GENERIC_MAPPING to com.sun.jna.platform.win32.WinNT - @BusyByte.

    πŸ› Bug Fixes

    • πŸ›  Fixed inconsistent behavior on Structure.ByValue fields within a Structure - @twall.
    • #279: Accommodate FreeBSD libc loading - @sevan.
    • 🚚 #287: Fixed contrib win32.Win32WindowDemo, now showing the added/removed drive letter, and whether the event is about media in drive or physical drive - @daifei4321.
    • #300: Fix stdcall argument alignment - @twall.

    πŸš€ Release 4.0

    πŸ”‹ Features

    • βž• Added ASL licensing to facilitate distribution - @twall.
    • 0️⃣ #109: Set default Java compatibility level to 1.6 - @twall.
    • 🐎 #209: Improved default performance saving last error results - @twall.
    • πŸ‘‰ Use predictable names for CPU architecture prefix (namely x86, x86-64); names correspond to OSGI processor values - @twall.
    • Avoid superfluous Structure memory allocation from native - @twall.
    • βž• Added Library.OPTION_CLASSLOADER, which enables loading native libraries from any class loader (including JNA's native library). This enables parallel dependencies on JNA (e.g. within a tomcat deployment without having to include JNA in the app server environment) - @twall.
    • πŸ‘€ Use per-library String encoding settings (see Native.getDefaultStringEncoding() and Structure.getStringEncoding()) - @twall.
    • βž• Added memory dump for debugging (see com.sun.jna.Memory) - @twall.
    • πŸ‘Œ Improved caching of Structure alignment, type mapping, and encoding information - @twall.
    • #225: Added platform.win32.Kernel32.GetLogicalProcessorInformation and platform.win32.Kernel32Util.getLogicalProcessorInformation - @trejkaz.
    • 0️⃣ #236: Auto-strip profiler native method prefix specified by jna.profiler.prefix, which defaults to $$YJP$$ - @twall.
    • βž• Added jna.debug_load property to diagnose library loading issues - @twall.
    • Throw explicit IllegalArgumentException when Structure.ByReference is used where it shouldn't be (can result in multiply freed memory or other unexpected behavior) - @twall.
    • 🏁 #243: Automatically accommodate long library paths on Windows which would otherwise fail - @twall.
    • #241 - Added com.sun.jna.platform.win32.Shell32.SHAppBarMessage - @bsorrentino.
    • πŸ‘‰ Make Structure.read/writeField() protected to facilitate per-field overrides - @twall.
    • Speed up callback lookup where large numbers of native function pointers are in use - @twall.

    πŸ› Bug Fixes

    • πŸ›  #213: Fixed Structure.toString() not to dump memory when jna.dump_memory is false - @tomohiron.
    • πŸ‘‰ Use dedicated TLS to indicate callback detach state, to avoid any potential conflicts with last error storage - @twall.
    • πŸ— #173: Fixed OSX 10.8/Xcode 4+ builds, web start path with Oracle 1.7 JDK - @mkjellman.
    • 🐧 #215: Forced use of XSI strerror_r on linux - LionelCons.
    • #214: Don't map library names when an absolute path is provided - @twall.
    • #218: Explicitly handled broken Android SecurityManager implementation - @twall.
    • πŸ›  #223: Fixed layout/size derivation for unions - @twall.
    • #229: Added CreateProcessW (Unicode version) - @twall.
    • Avoid solaris/x86 JVM bug w/library open flags - @twall.
    • πŸ›  Fixed NPE returning wide string from a direct-mapped function - @twall.
    • #237: Fix LastErrorException/getLastError on AIX - @skissane.
    • 🏁 #228: Fix win32/win64 crashes due to LastErrorException buffer overruns (snprintf on windows is broken) - @davidhoyt.

    πŸš€ Release 3.5.2

    πŸ”‹ Features

    • πŸ‘ Basic COM support for w32 - @wolftobias.
    • Avoid superfluous Structure memory allocation by using Structure(Pointer) ctors if available - @twall.
    • PR#120: Provide methods for extracting native libraries from the class path for use by JNA - @Zlika.
    • PR#163: The Java GUID structure can be used directly as alternative to Ole32Util.getGUIDFromString() - @wolftobias.
    • PR#163: Ported Win32 dbt.h - @wolftobias.
    • PR#163: Added Win32 WTSRegisterSessionNotification() and WTSUnRegisterSessionNotification() from Wtsapi32.dll - @wolftobias.
    • PR#163: Added Win32 native_window_msg that creates windows, registers for USB device and logon/logoff notifications - @wolftobias.
    • PR#178: Added Win32 USER_INFO_10 structure from LMAccess.h - @davidmc24.
    • PR#192: Added Win32 SHGetSpecialFolderPath() and initialization file (.ini) API functions from kernel32.dll - @headcrashing.
    • βœ… PR#194: Added Unit Test for CLSIDFromProgID() - @headcrashing.
    • PR#196: Added Win32 RegisterWindowMessage() and new wrapper User32Util for convenient use of RegisterWindowMessage, CreateWindow and CreateWindowEx - @headcrashing.
    • 🐧 PR#187: Allow StructureFieldOrderTest unit test in platform project to run on Linux. - @bhamail.

    πŸ› Bug Fixes

    • PR#180: Fix: added missing fields in XEvents.getFieldOrder() - @xwizard.
    • PR#183: Fix LMAccess.GROUP_INFO_3.getFieldOrder() to return correct fields names - @bhamail.
    • PR#187: Fix getFieldOrder() to return correct field names for some X11 structures - @bhamail.
    • βœ‚ Remove deprecated methods on Memory (getSize,isValid) and Structure (getSize) - @twall.
    • βœ‚ Remove problematic AWT check via Class.forName("java.awt.Component") (see here) - @twall.
    • PR#210 Add OSGI processor specs for Mac OS X - @bertfrees.
    • 🐧 PR#174: Recompile linux-amd64 natives to remove glibc-2.11 dependencies, now requires only 2.2.5 or better - @twall.
    • πŸ‘€ PR#183: Added StructureFieldOrderInspector unit test utility to scan for Structure field issues; see: com.sun.jna.platform.StructureFieldOrderTest.testMethodGetFieldOrder - @bhamail.
    • 🐧 PR#187: Allow StructureFieldOrderTest unit test in platform project to run on Linux - @bhamail.
    • 🚚 #206: Fix moveToTrash() on OSX to work with symlinks - @twall.
    • πŸ›  Fix NPE if Thread.getContextClassLoader() returns null - @twall.

    πŸš€ Release 3.5.1

    πŸ› Bug Fixes

    • πŸ›  Fix bug where string fields sometimes failed to be writtern - @twall (roman kisluhin).
    • PR#145: Fix Netapi32Util.getDomainTrusts() returns "empty" domain object - @aikidojohn.
    • PR#145: Fix Netapi32.getDC() - added missing fields in DOMAIN_CONTROLLER_INFO - @aikidojohn.
    • πŸš€ PR#151: 'platform.jar' in the dist directory was not updated for release 3.5.0. (The 'platform.jar' published to maven central was correct.)

    πŸš€ Release 3.5.0

    πŸ”‹ Features

    • #62 If a callback is required to reside in a DLL, use DLLCallback to tag your Callback object - @twall.
    • Structure.getFieldOrder() supersedes Structure.setFieldOrder() and is now required - @twall.
    • Search ~/Library/Frameworks and /Library/Frameworks on OSX - @shaneholloway.
    • Automatic cleanup of native threads (based on suggestions from neil smith) - @twall.
    • βž• Add android-arm target - @ochafik, @twall.
    • βž• Add jna.tmpdir to override temporary JNA storage location - @twall.
    • πŸ‘‰ Add EXTRA_MAKE_OPTS ant property to override make variables - @twall.
    • Add Library.OPTION_OPEN_FLAGS to customize dlopen behavior - @twall.
    • πŸ‘ #113, #114: Add support for GNU/kFreeBSD and debian multi-arch distros - @twall.

    πŸ› Bug Fixes

    • πŸ›  Fix Advapi32Util.registryGetValues() tried to allocate memory for a zero-length REG_BINARY value - @phailwhale22.
    • πŸ›  Fix crash in direct mode callbacks with certain type conversions - @twall.
    • More thoroughly propagate unexpected exceptions generated in jnidispatch - @twall.
    • Cleanup maven poms and publishing to central repo - @bhamail.
    • #129: Allow Memory field in structure - @twall.
    • Preserve PointerType fields on Structure.read() if unchanged - @twall.
    • #128: Fix masking extracting DWORD upper and lower WORD values - @twall.
    • #135: Fix for Advapi32Util.registryGetValues() when reading zero length values - @danwi.

    πŸš€ Release 3.4.2

    πŸ”‹ Features

    • βž• Add platform.win32.Kernel32.GetEnvironmentVariable and platform.win32.Kernel32Util.getEnvironmentVariable - @dblock.
    • 🚚 Moved Kernel32.dll function definitions from WinNT.java into Kernel32.java - @dblock.
    • Provide toPointer() methods on all _PTR types (platform win32) - @twall.
    • πŸ— Provide ant -Dskip-native to skip platform native build - @twall.
    • βœ… Provide ant -Dheadless=true to run unit tests headless - @twall.
    • βž• Added Windows dev environment instructions - @twall.

    πŸ› Bug Fixes

    • Ensure platform win32 classes use unsigned where appropriate (ULONG_PTR, UINT_PTR, ULONGLONG, WORD, DWORDLONG) - @twall.
    • #71, #73: Fix OSGI entries in manifest - @twall.
    • #78: Fix NPE in platform.win32.Netapi32Util.getDomainTrusts - @dblock.
    • πŸ›  Fix: auto-sync memory for struct** arguments (array of struct pointers) - @twall.
    • πŸ›  Fix: platform.win32.Secur32.AcquireCredentialsHandle, InitializeSecurityContext and AcceptSecurityContext on Win32 64-bit - @dblock.
    • Fix: avoid overwriting native char * or wchar_t * fields within structures when unmodified (similar to current operation with pointers) - @twall.
    • Fix: platform.win32.DsGetDC.DS_DOMAIN_TRUSTS and DsEnumerateDomainTrusts on Win32 64-bit - @trejkaz.
    • πŸ›  Fix: Crash freeing the wrong pointer in Netapi32Util.getDomainTrusts - @trejkaz.
    • #100: Fix platform.win32.W32FileMonitor - @dblock.
    • Return INT_PTR from platform.win32.Shell32.ShellExecute, since returning HINSTANCE is useless.
    • πŸ›  Fix runtime error in some instances where Structure.setFieldOrder is used (never return self when sharing AutoAllocated memory).
    • #107: Structure.clear() always calls ensureAllocated() to avoid NPE.
    • Ensure internal memory pointer is always allocated when calling Structure.useMemory(), even if layout is not yet determined.

    πŸš€ Release 3.4.1

    πŸ”‹ Features

    • βž• Add 'unsigned' modifier to IntegerType.
    • βž• Add to platform.win32.User32: GetLastInputInfo.
    • βž• Add platform.win32.WinNT.GetFileType and platform.win32.Kernel32Util.getFileType.
    • βž• Add to platform.win32.Kernel32Util: getFileType.

    πŸ› Bug Fixes

    • 🐧 Re-build linux-amd and linux-i386 against older versions of glibc (2.2.5 and 2.1.3 respectively).
    • πŸ–¨ Properly initialize first printer info struct in winspool library.
    • Properly support getting and setting zero-array-length REG_MULTI_SZ values on Win32.
    • Fixed SID in Win32 USER_INFO_23 and GROUP_INFO_3.
    • πŸ›  Fixed passing domain name into Win32 Netapi32Util.getUserInfo.

    πŸš€ Release 3.4.0

    πŸ”‹ Features

    • πŸ— Provide jna.nosys=true to avoid loading any system-provided JNA (useful for local build/development).
    • πŸ‘ Allow override of default jnidispatch library name with jna.boot.library.name system property.
    • Throw an Error if a system install of JNA is incompatible or if JNA's JNI library does not match.
    • Disable automatic jnidispatch unpacking with jna.nounpack=true.
    • Automatically look up system error messages for LastErrorException.
    • πŸ‘Œ Improved callback thread-mapping support; re-use, rename, and group callback threads.
    • 🐎 Cache structure layout results, improving performance of structure creation.
    • 🐧 linux/arm 32-bit support (hardware provided by Alex Lam).
    • 🐧 linux/ppc 32-bit support (hardware provided by Fritiof Hedman).
    • 🐧 Preliminary linux/ia64, linux/ppc64 support (thanks to Laurent Guerby and the GCC compile farm).
    • 🏁 Windows CE/Mobile support (w32ce-arm) (resources provided by andrea antonello and Hydrologis SRL).
    • 🐧 linux multi-arch support (kohsuke).
    • βž• Added REG_QWORD registry type support
    • βž• Add to platform.unix.x11: XGrabKey, XUngrabKey, XSetErrorHandler.
    • βž• Add to platform.mac.Carbon: GetEventDispatcherTarget, InstallEventHandler, RegisterEventHotKey, GetEventParameter, RemoveEventHandler, UnregisterEventHotKey.
    • βž• Add to platform.win32.Kernel32: CopyFile, MoveFile, MoveFileEx, CreateProcess, SetEnvironmentVariables, GetFileTime, SetFileTime, SetFileAttributes, DeviceIoControl, GetDiskFreeSpaceEx, CreateToolhelp32Snapshot, Process32First, Process32Next.
    • βž• Add to platform.win32.Msi: MsiGetComponentPath, MsiLocateComponent, MsiGetProductCode, MsiEnumComponents.
    • βž• Add to platform.win32.User32: RegisterHotKey, UnregisterHotKey
    • βž• Add to platform.win32.SetupApi: SetupDiGetClassDevs, SetupDiDestroyDeviceInfoList, SetupDiEnumDeviceInterfaces, SetupDiGetDeviceInterfaceDetail, SetupDiGetDeviceRegistryProperty.
    • βž• Add platform.win32.Shell32.ShellExecute.
    • βž• Add to platform.win32.User32: SetParent, IsWindowVisible, MoveWindow, SetWindowPos, AttachInputThread, SetForegroundWindow, GetForegroundWindow, SetFocus, SendInput, WaitForInputIdle, InvalidateRect, RedrawWindow, GetWindow, UpdateWindow, ShowWindow, CloseWindow.
    • βž• Add to platform.win32.Version: GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue.
    • βž• Add to platform.win32.Advapi32: GetFileSecurity, RegQueryValueEx(...Long...).
    • βž• Add to platform.win32.Netapi32: NetUserGetInfo.

    πŸ› Bug Fixes

    • Revise cleanup of in-use temporary files on win32 (issue 6).
    • πŸ›  Fix structure alignment issues on linux/ppc.
    • πŸ›  Fix structure alignment issues on linux/arm.
    • Account for NIO Buffer position (JIRA issue 185).
    • Avoid crash with very long Strings (> 150k in length).
    • πŸ›  Fix bug tracking Memory with an associated direct ByteBuffer.
    • πŸ›  Fix bug handling structs by value when type mappers are in effect (JIRA issue 188).

    πŸš€ Release 3.3.0

    πŸ”‹ Features

    • Facilitate Memory subclasses (jbellis).
    • πŸ‘ Allow multiple fields of the same type in Unions (Francis Barber).
    • βž• Add platform.win32.Advapi32.AdjustTokenPrivileges, platform.win32.Advapi32.LookupPrivilegeName, platform.win32.Advapi32.LookupPrivilegeValue, platform.win32.Advapi32.ImpersonateSelf.
    • βž• Add platform.win32.Advapi32.DuplicateTokenEx, platform.win32.Advapi32.CreateProcessAsUser, platform.win32.Kernel32.GetExitCodeProcess, platform.win32.Kernel32.TerminateProcess, platform.win32.Kernel32.ReadFile, platform.win32.Kernel32.CreatePipe, platform.win32.Kernel32.SetHandleInformation and related constants / structures in platform.win32.WinBase and platform.win32.WinNT. Please note that the SECURITY_ATTRIBUTES structure has been moved from platform.win32.WinNT to platform.win32.WinBase.
    • βž• Add platform.win32.Kernel32.DeleteFile and platform.win32.Kernel32Util.deleteFile.
    • βž• Add platform.win32.Kernel32.GetFileAttributes and platform.win32.Kernel32Util.getFileAttributes.
    • βž• Add platform.win32.Kernel32.GetTickCount.
    • βž• Add Win32 Service functions to platform.win32.Advapi32.
    • βž• Add platform.win32.W32ServiceManager and W32Service.
    • βž• Add Win32 Event Logging functions to platform.win32.Advapi32 and platform.win32.Advapi32Util.EventLogIterator.
    • platform.win32.Advapi32Util.registryCreateKey returns true if key was created, false if it already exists.
    • Add REG_BINARY, REG_EXPAND_SZ and REG_MULTI_SZ support to platform.win32.Advapi32Util registry functions.
    • ⬇️ Reduce JNI crossings in a number of native methods, moving object creation out into pure Java code.

    πŸ› Bug Fixes

    • 🚚 Move all native functions into com.sun.jna.Native, to ensure that all dependent classes must be disposed before the Native class is unloaded. Note that this change is incompatible with all previous JNA native libraries.
    • πŸ›  Fix platform.win32.Kernel32.GetNativeSystemInfo and GetSystemInfo AV on Win64.
    • πŸ›  Fix several potential minor bugs as reported by TvT.
    • πŸ›  Fix bug in Structure.StructureSet.toString (Blair Zajac), exposed by Tomcat ThreadLocal cleanup.
    • πŸ›  Fix several bugs when using Structure(Pointer) ctor and array fields (Samuel Audet).

    πŸš€ Release 3.2.7

    πŸ”‹ Features

    • βž• Add native peer value accessors for Pointer
    • The jna.library.path property is now re-evaluated whenever a native library is loaded. Previously this value was cached when the JNA classes loaded.
    • Native.loadLibrary can now load .drv files.
    • πŸ”¨ Refactor com.sun.jna.platform.win32.WINBASE into WinDef, WinNT and BaseTSD, matching Windows SDK headers.
    • πŸ”¨ Refactor constants from com.sun.jna.platform.win32.GDI32 into WinGDI, matching Windows SDK headers.
    • πŸ”¨ Refactor constants from com.sun.jna.platform.win32.User32 into WinUser, matching Windows SDK headers.
    • πŸ”¨ Refactor platform.win32.WinNT.LARGE_INTEGER into a union.
    • βž• Add platform.win32.ObjBase, com.sun.jna.platform.win32.Ole32.CoInitializeEx, CoUninitialize, and CoCreateInstance.
    • βž• Add platform.win32.Oleaut32.SysAllocString and SysFreeString.
    • βž• Add platform.win32.Secur32.ImpersonateSecurityContext and RevertSecurityContext.
    • Add platform.win32.WinNT.WELL_KNOWN_SID_TYPE, SECURITY_MAX_SID_SIZE and other related SID-related constants.
    • βž• Add platform.win32.Advapi32.CreateWellKnownSid and IsWellKnownSid and com.sun.jna.platform.win32.Advapi32Util.isWellKnownSid.
    • βž• Add platform.win32.Kernel32.GetVersion, GetVersionEx, GetSystemInfo, GetNativeSystemInfo, GlobalMemoryStatusEx, GetLogicalDriveStrings and IsWow64Process.
    • βž• Add platform.win32.Kernel32Util.getLogicalDriveStrings.
    • βž• Add platform.win32.User32.GetSystemMetrics.
    • βž• Add platform.win32.BaseTSD.DWORD_PTR.
    • βž• Add platform.win32.WinBase.SYSTEM_INFO and MEMORYSTATUSEX.
    • βž• Add platform.win32.WinNT.OSVERSIONINFOEX, VER constants.
    • βž• Add platform.win32.WinDef.ULONGLONG and DWORDLONG.
    • βž• Add platform.win32.Shell32.SHGetDesktopFolder (prep work for Com4JNA).
    • βž• Add platform.win32.Winspool.GetPrinterInfo.
    • βž• Add platform.win32.WinspoolUtil.getPrinterInfo1.
    • βž• Add platform.win32.GDI32.GetDeviceCaps.
    • βž• Add platform.win32.GDI32.GetDIBits.

    πŸ› Bug Fixes

    • πŸ›  Fix ClassCastException in Structure.equals (issue 152).
    • πŸ›  Fix bug initializing a structure object from existing memory when the structure has initialized fields (issue 133).
    • πŸ›  Fix NPE reading an array of string from a pointer when an element of the array is NULL (issue 151).
    • Avoid calling UnregisterNatives in native code (issue 154).
    • Compare unpacked library path against canonical (long) filename (issue 156).
    • πŸ›  Fix read() of uninitialized memory in platform.win32.Advapi32Util.getTokenGroups and getTokenAccount.
    • πŸ›  Fix com.sun.jna.platform.win32.Secur32.QuerySecurityContextToken to take a CtxtHandle instead of PSecHandle.
    • πŸ›  Fix definition of BITMAPINFO (platform/win32).

    πŸš€ Release 3.2.5

    πŸ”‹ Features

    • πŸ“¦ Split code in examples.jar into a contrib platform.jar package and individual packages for demos.
    • πŸ›  Fix Eclipse build and added Eclipse projects for all contrib samples, import projects from jnalib and contrib.
    • Ensure Structure fields correctly ordered when inherited.
    • πŸ‘‰ Use explicit Structure field whenever provided, regardless of whether the VM requires it.
    • βž• Add Win32 mappings for two dozen functions from Kernel32.dll, Advapi32.dll, Netapi32.dll, Secur32.dll, NtDll.dll, Ole32.dll, Shell32.dll and Crypt32.dll to com.sun.jna.platform.win32.
    • Port parts of WinError.h, WinNT.h, LMAccess.h, LMCons.h, LMErr.h, LMJoin.h, NTStatus.h, ShlObj.h, WinDef.h, ShellApi.h, Wdm.h, WinReg.h, WinCrypt.h, Sspi.h, Guid.h, NtSecApi.h and DsGetDc.h.
    • βž• Add Win32 simplified utility interfaces Kernel32Util, Advapi32Util, Netapi32Util, Crypt32Util, NtDllUtil, Shell32Util, Ole32Util and Secur32Util to com.sun.jna.platform.win32.
    • πŸ‘Œ Support unicode paths in W32FileUtils.
    • πŸ›  Fix exception during dispose in W32FileMonitor.

    πŸ› Bug Fixes

    • Provide String.replace for 1.4 compatibility.
    • Avoid allocating memory when Structure is provided a pointer in the ctor.
    • Ensure proper value returned in Pointer.getValue() for non-null, unchanged NIO Buffer values.
    • πŸ‘‰ Use 1.4-compatible URI generation (issue 149).

    πŸš€ Release 3.2.4

    πŸ”‹ Features

    • πŸ‘‰ Make Pointer ctor public.
    • Provide access to Function objects for arbitrary Pointer values.
    • βž• Add linux/ia64 binaries (bpiwowar). See issue 134 patch.

    πŸ› Bug Fixes

    • πŸ‘‰ Use a more robust method to decode a file-based URL (issue 135).

    πŸš€ Release 3.2.3

    πŸ”‹ Features

    • πŸ“¦ Include version information in code in case package information lost.

    πŸ› Bug Fixes

    • πŸ›  Fix WindowUtils exception on mouse over TrayIcon.
    • πŸ›  Fix bug toggling windows transparent/opaque (win32/OSX).
    • Avoid overwriting unchanged Pointer values in arrays (function calls with Pointer[] and Structure.read).
    • Ensure Structure fields marked final are never written.
    • πŸ›  Fix bug preventing proper population Structure.ByReference fields on Structure read.
    • Ensure double buffering is disabled in components added to a transparent window.
    • πŸ›  Fix UnsatisfiedLinkError attempting to load system libraries under Web Start.
    • πŸ›  Fix loading Web Start-provided libraries on OSX (libraries must have a .jnilib suffix under Web Start).
    • Properly include sources in Maven zip file (Issue 129).

    πŸš€ Release 3.2.2

    πŸ”‹ Features

    • Provide length-specified Pointer.getStringArray()

    πŸ› Bug Fixes

    • πŸ›  Fix crash with direct mapping if NULL struct* used (Issue 125).
    • πŸ›  Fix case where null-valued Structure fields would get non-null values on write.
    • πŸ”€ Synch callback Structure/Structure[] arguments on callback return.
    • πŸ›  Fix NPE when mapping an interface to the current process.
    • 🐧 Automatically load proper C library version from current process on Linux (avoids crashing bug on Ubuntu with libc-i686 packages active).
    • Avoid scanning structure contents in Structure.toString if contents aren't actually used.

    πŸš€ Release 3.2.1

    πŸ”‹ Features

    • βž• Add HRESULT, LONG mapping to W32API (marc strapetz).

    πŸ› Bug Fixes

    • πŸ›  Fix definition of HWND_BROADCAST in W32API.
    • πŸ›  Fix memory alignment checking (Issue 121).
    • πŸ›  Fix Structure equals/hashCode implementation, based on current Java fields rather than strictly native memory contents. Avoid using equals/hashCode when avoiding recursive reads/writes.

    πŸš€ Release 3.2.0

    πŸ”‹ Features

    • ⚑️ Handle String, Structure, Callback, Buffer, and primitive arrays in direct mappings. Handle NativeMapped and TypeMapper, with optimized paths for IntegerType and PointerType.
    • πŸ‘» Optionally throw errno/GetLastError as an exception. This is preferred to (and more efficient than) calling Native.getLastError().
    • Unload/delete native library unpacked from jna.jar if Native class is garbage collected. Only install shutdown hook if using the system class loader.
    • Auto-write contiguous Structure arrays when first element is written.
    • πŸ‘Œ Support NativeMapped[] as function arguments for interface-mapped libraries (Issue 90).
    • 🏁 Enable function lookup within current process on Windows.

    πŸ› Bug Fixes

    • Restrict recursive structure reads/writes by thread instead of globally. This avoids potentially missed reads/writes with concurrent access (Issue 120).
    • Ensure Memory is not GC'd and freed if direct NIO buffers mapped to it are extant.
    • πŸ‘ Allow types derived from java.nio.Buffer as Structure fields.

    πŸš€ Release 3.1.0

    πŸ”‹ Features

    • βž• Add raw JNI mapping of static Java methods. Performance is about 10X that of traditional JNA interface mapping, although with less type conversion functionality.
    • βž• Add library option to allow passing/return of Java Objects.
    • πŸ‘ Allow handling of uncaught callback exceptions (Issue 63).
    • πŸ‘€ Object oriented interface to X server (see contrib/x11)
    • πŸ‘‰ Make Memory class more accessible.
    • Provide Structure ctor with Pointer argument (issue 102).
    • πŸ‘ Allow implicit library access to current process on linux (issue 98).
    • 🐧 Open all shared libraries with RTLD_GLOBAL, if applicable. This was the default behavior on OSX and changes the default behavior on linux.
    • πŸ‘ Allow NIO Buffer as Structure field (with limitations) (Issue 57)
    • βž• Add size_t size.

    πŸ› Bug Fixes

    • βœ… Run tests with libjsig.so, if available, which fixes some crashes when running tests on 64-bit platforms.
    • πŸ›  Fix Issue 104.
    • πŸ›  Fix Issue 94 (Java 1.6 update 10 regression).
    • πŸ›  Fix Issue 51 (Java 1.6 update 10 regression).
    • πŸ›  Fix Issue 95.
    • πŸ›  Fix Issue 101.
    • πŸ›  Fix Issue 111, memory leak with String-returning Callback.
    • πŸ›  Fix missing storage of union type information (affects usage of struct/union by value as argument and return type).
    • βœ‚ Remove non-functional Structure ctors requiring explicit size.

    πŸš€ Release 3.0.9

    πŸ› Bug Fixes

    • πŸ’Ž Fix issue 93 by only manually searching jna.library.path, then falling back to passing the mapped library name to dlopen/LoadLibrary. This fixes an issue in JRUBY where the incorrect libc.so.6 was being loaded.

    πŸš€ Release 3.0.8

    πŸ”‹ Features

    • Auto-map Pointer[]/String[]/WString[] return values.
    • Provide utility functions to convert String to primitive array.
    • βž• Add jna.library.boot.path property to define the directory that the native stub library is loaded from

    πŸš€ Release 3.0.7

    πŸ”‹ Features

    • πŸ‘Œ Improve Win32 loading of libraries with dependencies.

    πŸ› Bug Fixes

    • πŸ›  Fix bug reading structures with PointerType fields, introduced with Pointer field preservation fix.

    πŸš€ Release 3.0.6

    πŸ”‹ Features

    • πŸ‘ Allow arbitrary callback method names if only one method is defined in the class which implements Callback (colinwalters).
    • πŸ‘ Allow specification of callback type mappers by using a TYPE_MAPPER field (colinwalters).
    • πŸ‘ Allow uninitialized (null-valued) boxed primitives in Structures (colinwalters).
    • βž• Add convenience methods to set active Union field and value simultaneously (xylo).
    • Augment Union read/writeField to set the active field.
    • πŸ‘ Allow Structure auto-synch across native calls to be disabled.
    • πŸ‘ Win64 support.

    πŸ› Bug Fixes

    • Avoid overwriting unchanged Structure fields of type Pointer.
    • Avoid more content dragging on OSX or warn if it's too late.
    • πŸ›  Fix UnsatisfiedLinkError using transparent window on Win2K.
    • πŸ›  Fix memory leak with callbacks called from native threads with no Java context (johnwallace).
    • Defer structure size calculation if type mapper not yet set, allowing type mapper to be set in derived constructors (colinwalters).
    • Ensure structure memory is allocated in Structure.read/writeField.

    πŸš€ Release 3.0.5

    πŸ”‹ Features

    • πŸ‘ Allow explicit declaration of field order for VMs which have an unpredictable field order.
    • Check for w32 libraries with a "lib" prefix in addition to normal lookup.
    • πŸ‘ Allow String[]/WString[] as callback argument/return value (assume NULL-terminated array).
    • βž• Add Solaris8 compatibility to sunos-sparc build (Corey Puffalt).
    • 🌐 Look up libraries using web start library path, if appropriate (Corey Puffalt).
    • πŸ‘‰ Use constants to return integer boolean values.

    πŸ› Bug Fixes

    • 🏁 Properly track cursor on alpha-masked windows.
    • 🐧 Avoid searching /lib or /usr/lib on 64-bit Linux.
    • Avoid using incorrect version of a library when both 32- and 64-bit versions are found.
    • Avoid transparent window events always dragging window bug on OSX.
    • πŸ›  Fix division by zero error calculating structure size on OSX/ppc.
    • Avoid overwriting initialized NativeMapped Structure fields when calculating structure size.
    • πŸ›  Fix NPE reading back into StringArray.

    πŸš€ Release 3.0.4

    πŸ”‹ Features

    • Automatically write contents of Structure.ByReference fields on Structure.write().
    • πŸ‘‰ Use the actual parameter type in Function invocations if no parameter type information is available (whether method is missing or untyped varargs).
    • Augmented X11 library mappings (xylo).
    • πŸ‘Œ Support read/write of NativeMapped arrays within Structure (notably NativeLong).

    πŸ› Bug Fixes

    • πŸ›  Fix library load error when /usr/lib32 and /usr/lib both exist (linux) (Marek Slama).
    • Avoid incorrect matches against libraries named with the same prefix (e.g. libc-client.so vs libc.so) (xylo).
    • Properly handle arrays of NativeMapped (e.g. NativeLong) as a Structure field (stefan endrullis).
    • Ensure structure size calculated prior to setting union active type.
    • XID is 64-bits on 64-bit X clients (xylo).
    • Ensure proper arch name is used on Debian (amd64 instead of x86_64).

    πŸš€ Release 3.0.3

    πŸ”‹ Features

    • πŸ— Enable build/run using IBM's J9 VM (leonardo).
    • πŸ‘‰ Make StdCallFunctionMapper attempt a leading underscore if the simpler mapping doesn't work.
    • πŸ‘ Allow Structure.read to overwrite final fields (may not work on some 1.4 VMs).

    πŸ› Bug Fixes

    • πŸ›  Fix NPE when passing an array of Structure.ByReference.
    • 🐧 Compare entire linux library version when finding a match.
    • Don't pass struct by value unless the method signature declares it.
    • Restrict custom first element structure alignment to OSX/ppc.
    • πŸ‘Œ Improve performance and reduce memory footprint for window masks. Optimize polygon-based masks on w32. Use XFillRectangles on X11.
    • πŸ›  Fix linkage settings on sunos-amd64 to avoid relocation errors.
    • πŸ›  Fix callback allocation code on w32, solaris, freebsd, darwin (libffi was misconfigured).
    • πŸ›  Fix bug when NativeMapped fields are used in a Structure.ByValue instance.
    • πŸ›  Fix NPE calling Structure.read() before memory is initialized.
    • πŸ›  Fix NPE calling Structure.read/write with uninitialized NativeMapped fields.

    πŸš€ Release 3.0.2

    πŸ”‹ Features

    • Attempt to force unload of jnidispatch library prior to deleting it (w32).
    • βž• Added amd64 targets for OSX, FreeBSD, and Solaris.

    πŸ› Bug Fixes

    • ⬇️ Reduce space allocated for invocation arguments.
    • πŸ›  Fix NPE when NativeMapped type is used in a Structure.
    • πŸ›  Fix some X11 type mappings for 64-bit.
    • πŸ›  Fix OSX Leopard/JRE1.5+ window transparency.
    • πŸ›  Fix window alpha compositing on X11.
    • πŸ›  Fix loading of libraries with unicode names on OSX.

    πŸš€ Release 3.0.1

    πŸ”‹ Features

    • πŸ‘Œ Improve transparent window drawing performance on w32
    • πŸ‘‰ Use closure allocation from libffi

    πŸ› Bug Fixes

    • Ensure nested structure arrays initialized with Structure.toArray use the appropriate native memory.
    • Ensure structure size is calculated prior to converting to array
    • 🏁 Avoid creating new windows when setting a window mask
    • πŸ›  Fix bug in Pointer.setChar.

    πŸš€ Release 3.0

    πŸ”‹ Features

    • πŸ‘ More supported platforms, via GCC's libffi (wmeissner)
    • πŸ‘Œ Support struct by value as parameter and return value (duncan)
    • πŸ‘Œ Support struct by reference within structures
    • Provide access to native peer for java.awt.Component
    • Provide access to native peer on OS X.
    • πŸ‘Œ Support MINGW32 builds (fullung)
    • πŸ‘ Allow per-field Structure read/write by field name
    • Avoid writing Structure fields marked 'volatile'
    • Read and wrap function pointers in Structure fields when read with a Java proxy to allow easy Java-side invocation (Ken Larson)
    • πŸ‘Œ Support array-backed Buffers as arguments (wmeissner)
    • Auto-conversion of custom types (wmeissner)
    • πŸ‘ Allow pointer type-safety
    • Optional VM crash protection, via Native.setProtected(boolean)
    • Auto-convert WString[]
    • πŸ”€ Provide library synchronization wrapper similar to Collections.synchronizedX
    • πŸ‘Œ Support lookup of OSX framework libraries by name
    • Explicit access to shared library global data
    • 🌐 Invocation interception to facilitate translation of C preprocessor macros and inline functions
    • 🌐 Provide utility to determine Web Start native library cache location; auto-include this path if jnidispatch is included as a <nativelib> (robertengels)
    • Provide access to aligned memory
    • πŸ”– Versioning information embedded in jna.jar and native library

    πŸ› Bug Fixes

    • πŸ†“ Avoid attempts to free native library if it failed to load (wmeissner)
    • Explicitly check method signatures for varargs instead of heuristically guessing (wmeissner)
    • Disallow declaring Pointer-derived fields in Structures (Function, Memory)
    • Ensure Object.toString/hashCode/equals methods are intercepted on proxyied interfaces
    • ⚑️ Update X11 library for 64-bit use (wmeissner)
    • Properly map arrays of char*/wchar_t* under w32
    • πŸ‘ Allow Pointer[] as a Structure field and Function argument
    • πŸ›  Fix some misleading Structure error messages
    • Properly preserve/return GetLastError/errno after native calls
    • Allocate executable memory on w32 to avoid errors with hardware-enforced data execution protection (DEP)
    • πŸ›  Fix VM crash on w32 stdcall callbacks
    • πŸ‘‰ Use long offsets and sizes rather than ints (64-bit safe)
    • πŸš€ Properly clean up references and release closure memory on JNI_Unload
    • β†ͺ Use simpler AWT/JAWT library loading workaround
    • Avoid changing array references within a Structure on read

    πŸš€ Release 2.5

    πŸ”‹ Features

    • Unions
    • ⚑️ Optimized shaped windows (chris deckers & olivier chafik); instantiation time improved by about 2-3 orders of magnitude for large, mostly contiguous shapes
    • Provide type mapping in callback arguments/results
    • Provide access to ByteBuffer direct address as a Pointer
    • Provide customization of native string encoding with jna.encoding system property

    πŸ› Bug Fixes

    • Properly handle VMs with reversed Structure member storage
    • Avoid making window undecorated when clearing window mask on X11
    • πŸ›  Fix structure alignment bug on OSX/PPC when first element is > 4 bytes in size
    • Clearing OSX window mask by setting to MASK_NONE now works properly
    • Avoid index exceptions if native buffers are not NUL-terminated on string conversions
    • Write initialized Structure[] argument memory prior to function calls
    • πŸ›  Fix IllegalArgumentException reading WString into a Structure
    • πŸ›  Clear memory when allocating a structure block (fixes VM crash)
    • βœ‚ Remove versioned JAWT dependency on OSX, allowing use on 10.3/JRE1.4.

    πŸš€ Release 2.4

    πŸ”‹ Features

    • πŸ‘ Explicitly support unaligned structures
    • Auto-reallocate structure arrays
    • Automatic handling of w32 UNICODE/ASCII variants
    • Automatic mapping of decorated w32 stdcall function names
    • Customizable, automatic type conversion of arguments and results (wmeissner)
    • πŸ‘Œ Support char*[] arguments as Java String[]
    • πŸ‘ Structure supports Callback members (wmeissner)
    • getByteBuffer from Pointer/Memory (wmeissner)
    • πŸ‘ Allow GC of native libraries
    • πŸ’Ž Facilitate use from non-Java contexts (JRuby et al.) (wmeissner)
    • πŸ‘Œ Improve library path searching (wmeissner)
    • πŸ– Handle Structure[] arguments
    • πŸ– Handle native long arguments and return values
    • πŸ– Handle direct and array-based ByteBuffer arguments (wmeissner)
    • πŸ”„ Change default w32 build to use GCC (it's free, yo)

    πŸ› Bug Fixes

    • Structure.toArray failed to initialize members
    • πŸ†“ Disallow explicit free of Structure/Memory
    • πŸš€ Ensure native libraries are only loaded once until released
    • Properly handle NULL when the return value is a Structure
    • 🐧 Proper conversion to wchar_t on linux
    • Copy full length of Java strings to C strings instead of stopping when a NUL character is encountered