State of interfacing with c++

Johan Engelen via Digitalmars-d digitalmars-d at puremagic.com
Fri Mar 18 06:59:57 PDT 2016


On Friday, 18 March 2016 at 13:45:18 UTC, Jonas Drewsen wrote:
> For a hack week at work I am thinking about creating a module 
> in D that can be used with our existing application which is 
> written in C++.
>
> Can anyone shed some light on the current status of interfacing 
> with C++? In particular:
>
> 1, Can I build my C++ program using visual c++ and then link a 
> D module compiled with gdc/ldc/dmd into it using the ms linker?

This is what we do for LDC.
Perhaps the only annoyance is that you have to know what linker 
flags gdc/ldc/dmd use. See 
https://github.com/ldc-developers/ldc/blob/master/CMakeLists.txt#L126-L177
It'd be nice to be able to call `dmd -ldflags` whose output would 
be the standard linker flags.

> 3, Which features of D or C++ should I expect not to work or 
> shouldn't use when interfacing.

C++ constructors/destructors are different from their D siblings.
To help with this, you can define creation/destruction helper 
functions that you would call from the other domain, for example 
C++ calling a "Class* createClass(...)" function, defined in D as 
something like
extern(C++) Class createClass(...) {
    return new Class(...);
}


More information about the Digitalmars-d mailing list