Interfacing via Java Native Interface

Andrew diehertz at gmail.com
Wed Oct 16 03:11:30 PDT 2013


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.


More information about the Digitalmars-d-learn mailing list