Interfacing via Java Native Interface

Iain Buclaw ibuclaw at ubuntu.com
Wed Oct 16 03:15:16 PDT 2013


On Wednesday, 16 October 2013 at 10:11:32 UTC, Andrew wrote:
> Hello there!
> I've decided to learn a bit of D, as I am currently Android 
> Developer (mostly C++ <- JNI -> Java), I'm trying to create a D 
> shared library which exports function (with extern (C)) for 
> invocation from Java.
> My .d file contains only a single function returning an int, 
> .java calls this function several times.
> This approach only works if d-function is trivial, e.g. it's 
> not using any D functionality (I believe that it is related to 
> GC and memory allocation).
> For example, if my d-function just returns some constant 
> integer, java side receives it. core.stdc.stdio also works and 
> allows console output, but it's not the case with 
> std.stdio.writeln and similar functions.
> If I use any d-specific functions my program crashes while 
> calling native code with some weird message like following:
> "Invalid memory access of location 0x0 rip=addr".
>
> It seems like D is not initialized at all, maybe there is some 
> internal function like dinit() which I can call in order to 
> activate everything?
>
> Thanks.


JNI requires (to some degree) compiler support.  This could be 
done in gdc as backend support is there because of g++ JNI 
interface to gcj. But it would be some magic module or change to 
the language to add the Java types to the language.

Regards
Iain.



More information about the Digitalmars-d-learn mailing list