Calling D functions from C

Matthias Walter Matthias.Walter at st.ovgu.de
Tue May 27 03:35:35 PDT 2008


Pontus Pihlgren Wrote:

> Hi all.
> 
> Its a rather hypothetical I guess, but is it possible to call D 
> functions from C? If so, are there limitations?
> 
> Kind Regards,
> Pontus.

If you want to really call the D function from C code, compiling with a C compiler, this can get tricky, as the C compiler normally does not know the ABI of D. It therefore does not know in which registers / stack slots to put which argument, etc.

But you can write a Wrapper routine in D which simply calls your D routine but has an extern (C) calling convention:

# extern (C) int myFunctionWrapper (char a, int b, char* c)
# {
#    return myFunction (a,b,c); // myFunction is a normal D function.
# }

With this code you can call myFunctionWrapper from your C code like you do normally. Alternatively you can code all your C stuff in a .d file, putting extern (C) around everything. Then you can call it without a wrapper, too.

best regards
Matthias Walter


More information about the Digitalmars-d-learn mailing list