D - C linking to D library ?
- int_80h (1/1) Feb 05 2003 Can a C program be linked against a LIB built with D?
- Ilya Minkov (16/18) Feb 05 2003 Sure.
- Ilya Minkov (8/33) Feb 05 2003 Oh, i didn't try, but it might be possible to write
- Burton Radons (22/23) Feb 05 2003 You need to use extern (C) as Ilya says, but you also need to boot up
Can a C program be linked against a LIB built with D?
Feb 05 2003
int_80h wrote:Can a C program be linked against a LIB built with D?Sure. you write in D something like extern(C) return_type functionName(type1 name1, type2 mane2) { // function does smth here } such a function can be directly consumed by a C programme. You might have an (OS-dependant) choice of other calling conventions, noted by extern(convention), which you might also want to use in your C program, "Pascal" and "Windows". Windows is known to you as "stdcall". The difference between both is AFAIK parameter order, and they are both faster and safer than the C calling convention, but probably not as fast as D internal calling convention. The drawback of "Windows" and "Pascal" is that they don't allow var_args, which are to be avoided anyway. -i.
Feb 05 2003
Oh, i didn't try, but it might be possible to write
extern(convention) {
...
}
and place all your library functions instead of "..." (and don't forget
to replace "convention"), and thus wrap all at one shot.
-i.
Ilya Minkov wrote:
int_80h wrote:
Can a C program be linked against a LIB built with D?
Sure.
you write in D something like
extern(C) return_type functionName(type1 name1, type2 mane2)
{
// function does smth here
}
such a function can be directly consumed by a C programme. You might
have an (OS-dependant) choice of other calling conventions, noted by
extern(convention), which you might also want to use in your C program,
"Pascal" and "Windows". Windows is known to you as "stdcall". The
difference between both is AFAIK parameter order, and they are both
faster and safer than the C calling convention, but probably not as fast
as D internal calling convention. The drawback of "Windows" and "Pascal"
is that they don't allow var_args, which are to be avoided anyway.
-i.
Feb 05 2003
int_80h wrote:Can a C program be linked against a LIB built with D?You need to use extern (C) as Ilya says, but you also need to boot up the runtime with this in C: extern void gc_init(); extern void gc_term(); extern void _minit(); extern void _moduleCtor(); extern void _moduleUnitTests(); void Dinit () { gc_init (); _minit (); _moduleCtor (); _moduleUnitTests (); } void Dterm () { gc_term (); } Global pointers shared with D might actually work properly, although using the same tool in C (DMC) would increase the chances of that. There're other concerns. It's not a well-trod path.
Feb 05 2003









Ilya Minkov <midiclub 8ung.at> 