www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Question about calling D method from C/C++

reply "Eric" <eric makechip.com> writes:
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?
Jun 02 2013
parent reply Jacob Carlborg <doob me.com> writes:
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
Jun 02 2013
parent reply "Eric" <eric makechip.com> writes:
 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
Jun 03 2013
parent reply Jacob Carlborg <doob me.com> writes:
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
Jun 03 2013
parent "Eric" <eric makechip.com> writes:
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...
Jun 03 2013