Writing a library

Mn mn at mailinator.com
Fri Feb 16 11:21:24 PST 2007


David Gileadi Wrote:

> Jarrett Billingsley wrote:
> > "Mn" <mn at mailinator.com> wrote in message 
> > news:er492f$1sti$1 at digitalmars.com...
> >> Hello World!
> >>
> >> Is it possible to write a library in D that can be used by other 
> >> programming languages? And if yes, how to do it? I can think of two ways 
> >> of "using" a lib in general:
> >>
> >> 1. The OOP way: use a class of the lib, then its functions, dunno how its 
> >> called.
> >> 2. The Un-OOP way: use a function of a lib, its called P/Invoke in C#.
> >>
> >> I am only interested in the more popular languages like C, C++, Java, C#, 
> >> PHP.
> >>
> >> Greetings and thank you.
> >> -- Mn
> > 
> > No other languages understand D calling or mangling conventions, but D can 
> > make functions with C, Windows, and Pascal calling conventions.  If you just 
> > do something like:
> > 
> > extern(C) export void func(int x) { ... }
> > 
> > You can then, maybe, make a DLL or something out of it which can be called 
> > from virtually any other mainstream language, since most things understand 
> > the C calling convention. 
> > 
> 
> I tried this very thing about a year ago, creating a DLL in D with 
> extern(C) functions which was imported and called by a C# program.  It 
> passed data back and forth via simple structs, defined on both the C# 
> and D side.  It worked great when called via a D host, but would 
> segfault every time I tried it from the C# host.  I never did figure out 
> what was going on (and since it was a school project I just gave up and 
> ported the code to C#).  I suspected it was the fault of the garbage 
> collector running in a separate thread, and at the time the calls to 
> disable/enable the GC didn't do anything, so I didn't get to test if my 
> suspicion was true.
> 
> I'd be very interested to hear of your success with this.

You said you wrote a DLL in D and tried to access it via C#, ok. But what do you mean with "D host" and "C# host" then?? Accessing a .NET Assembly is unlikely to be possible that easy from D, although C# offers COM support. I will post a seperate reply for this topic.

As far as I know there is a way to disable GC for parts of or the whole program.

I will of course continue to look into this, but as of now I just started with D. Although it looks wonderful and its steep learning curve should be conquered in zero time.



More information about the Digitalmars-d mailing list