Writing a library
David Gileadi
foo at bar.com
Fri Feb 16 11:43:30 PST 2007
Mn wrote:
> 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.
Maybe "host" wasn't the best choice of words. I meant the .exe which
loads the DLL and calls the code--i.e. in this case the C# program was
the "host". I also had a program written in D to call the code in the
DLL. I never tried to load a DLL written in C# from D code--as you say,
this is not likely possible, at least not without some massive effort.
More information about the Digitalmars-d
mailing list