Thread overview
Question about calling D method from C/C++
Jun 03, 2013
Eric
Jun 03, 2013
Jacob Carlborg
Jun 03, 2013
Eric
Jun 03, 2013
Jacob Carlborg
Jun 03, 2013
Eric
June 03, 2013
If I use "new" inside a D method that is called from a c++ program
it causes a segmentation fault.  For example:

C++ code:

#include "dcode.h"

int main(int argc, char *argv[]) {
    hello();
    return(0);
}

D code:

class X {
    private int x;
    this() { x = 5; }
    public int getX() { return(x); }
}

extern (C++) void hello() {
    X x = new X();
}

This will crash when the line "X x = new X()" is executed.
Is this to be expected?


June 03, 2013
On 2013-06-03 06:32, Eric wrote:
> If I use "new" inside a D method that is called from a c++ program
> it causes a segmentation fault.  For example:
>
> C++ code:
>
> #include "dcode.h"
>
> int main(int argc, char *argv[]) {
>      hello();
>      return(0);
> }
>
> D code:
>
> class X {
>      private int x;
>      this() { x = 5; }
>      public int getX() { return(x); }
> }
>
> extern (C++) void hello() {
>      X x = new X();
> }
>
> This will crash when the line "X x = new X()" is executed.
> Is this to be expected?

It seems you haven't started the runtime.

Use this function:

https://github.com/D-Programming-Language/druntime/blob/master/src/rt/dmain2.d#L281

-- 
/Jacob Carlborg
June 03, 2013
>> This will crash when the line "X x = new X()" is executed.
>> Is this to be expected?
>
> It seems you haven't started the runtime.
>
> Use this function:
>
> https://github.com/D-Programming-Language/druntime/blob/master/src/rt/dmain2.d#L281


Thanks.  That fixed my problem.  This is my first D program,
so I wouldn't have figured it out on my own...

-Eric
June 03, 2013
On 2013-06-03 17:42, Eric wrote:

> Thanks.  That fixed my problem.  This is my first D program,
> so I wouldn't have figured it out on my own...

If it's not obvious, you should terminate the runtime as well when your program ends. There's a corresponding function for that.

-- 
/Jacob Carlborg
June 03, 2013
On Monday, 3 June 2013 at 17:20:22 UTC, Jacob Carlborg wrote:
> On 2013-06-03 17:42, Eric wrote:
>
>> Thanks.  That fixed my problem.  This is my first D program,
>> so I wouldn't have figured it out on my own...
>
> If it's not obvious, you should terminate the runtime as well when your program ends. There's a corresponding function for that.

Thanks. I would not have guessed that either...