Interfacing via Java Native Interface

John Colvin john.loughran.colvin at gmail.com
Wed Oct 16 04:00:11 PDT 2013


On Wednesday, 16 October 2013 at 10:53:28 UTC, Andrew wrote:
> On Wednesday, 16 October 2013 at 10:41:35 UTC, John Colvin 
> wrote:
>> 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.
>>
>> Try using Runtime.init() from core.runtime
>
> Wow, thanks! Now everything works, proving that my guess on 
> uninitialized runtime was correct.

No problem.

> It's actually Runtime.initialize() according to documentation, 
> by the way.

Ah yeah, sorry I misremembered.


More information about the Digitalmars-d-learn mailing list