[Issue 2480] extern(C++) does not work with linux

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Nov 30 12:54:21 PST 2008


http://d.puremagic.com/issues/show_bug.cgi?id=2480


torhu at yahoo.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |torhu at yahoo.com
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID




------- Comment #1 from torhu at yahoo.com  2008-11-30 14:54 -------
That's not supposed to work, see
http://www.digitalmars.com/d/2.0/cpp_interface.html.  Scroll down to "Calling
C++ Virtual Functions From D" on that page.  C++ functions have to be either
global or virtual, and you need to create an interface on the D side.  C++
struct virtual methods won't work, since the name mangling is different than
for classes.  And you need to instantiate and delete C++ objects in C++ code,
not D code.

This works, at least on Windows:

foo.cpp file:
class Board{ public: virtual void clear(){} };

Board* createBoard() { return new Board; }
void freeBoard(Board* b) { delete b; }


bar.d file:
extern(C++) interface Board
{
    void clear();
}

extern (C++) Board createBoard();
extern (C++) void freeBoard(Board b);

void main()
{
  Board b = createBoard();
  b.clear();
  freeBoard(b);
}


-- 



More information about the Digitalmars-d-bugs mailing list