Skip to content
Olivier Chafik edited this page Nov 8, 2022 · 5 revisions

Current State of the BridJ project

Display the CHANGELOG

Supported Platforms

Binaries are currently available and routinely tested for the following platforms :

  • Windows (32 & 64 bits), tested on XP 32 bits and Windows 7 64 bits.
  • MacOS X (Universal : PPC, Intel 32 & 64 bits), tested on x86_64.
  • Linux (x86 & x86_64), tested on Ubuntu 9.10 x86 and x86_64.
  • Solaris 10 x86

(plans are to support FreeBSD 32/64 and Solaris sparc soon)

Working Features

  • thread-safe design (including reentrant calls)
  • JNAerator support on par with JNA's
  • C functions calls with __cdecl and __stdcall conventions (including varargs support)
  • C++ constructors, method calls and destructors (including virtual methods, __thiscall and __stdcall conventions)
  • C++ classes subclassing from Java (override virtual C++ methods from Java !)
  • lazy signatures annotation support (exact symbols are optional)
  • Call C callbacks from Java and call Java-implemented callbacks from C
  • Complete Pointers API (with typed opaque pointers, array accessible + iterable reified generic Pointer base class...)
  • Type-safe enums (ValuedEnum + FlagSet classes) : unifies singleton and multi-flags patterns
  • COM object creation and calls, with some support for the VARIANT type
  • lightweight and fast structs (no memory duplication nor update issues between Java and the native side), with unions and sub-structs
  • Getting the native handler to an AWT Component's peer
  • Dynamic function pointers casting (see Pointer.asDynamicFunction)
  • Enumeration of shared libraries symbols (w/ demangling) and resolution of libraries paths (including support for GNU LD scripts)

Known limitations

  • structs by value not supported yet (neither as function arguments nor as function return values)
  • requires Java 1.5 or more recent (if you need 1.4 compatibility, you shoud JNA instead)

Features in progress

  • assembly-optimized raw calls (for Win32, Win64, Mac64, Linux32, Linux64) : win64 is buggy, lin32 is TODO, mac is buggy with floats and doubles (of course, buggy implies disabled)
  • C++ templates for functions and classes (combination of generics and extra args/fields for types reification and last-minute lookup of actual symbols). Begins to work with GCC.
  • ObjectiveC methods calls (objc_msgSend) : hope to draw interest from Rococoa developers

Planned features

(also see GoogleSummerOfCode for projects on which we'd love to receive help, from students or passionate individuals)

  • pass and return structs by value
  • C++ templates typedefs : typedef WImageC<uchar, 1> WImage1_b; (JNAerator should create WImage1_b with the correct constructor).
  • COM JNAeration : need to parse __declspec(uuid("xxx"))
  • some amount of built-in support for STL types (strings and vector at least, in debug/release mode, for GNU's STL, STLPort and MS VC++9's STL)
  • Full MFC Runtime (with annotations-based message map creation)
  • Mono/CLR interop (see my previous hack)
  • MS/.NET interop
  • reverse-engineering helper (struct sizes guesses can be eased up a bit, and there's already a good demangler)

Dynamic Library dependencies

On Windows :

  • C runtime + DbgHelp

On MacOS X :

  • C runtime + libobjc + pthreads

On other Unix platforms :

  • C runtime + pthreads

Features Not Planned / Ruled Out

Why limiting the scope of this project so early ?