June 11, 2014 Re: Basics of calling C from D | ||||
---|---|---|---|---|
| ||||
Posted in reply to belkin | On Wednesday, 11 June 2014 at 14:28:49 UTC, belkin wrote:
> On Wednesday, 11 June 2014 at 14:02:08 UTC, John Colvin wrote:
>> On Wednesday, 11 June 2014 at 13:52:09 UTC, belkin wrote:
>>> Example: I have this C function that is compiled into a library
>>>
>>> //File: factorial.h
>>> int factorial(int n);
>>>
>>>
>>> //File: factorial.c
>>> #include "factorial.h"
>>>
>>> int factorial(int n)
>>> {
>>> if(n!=1)
>>> return n*factorial(n-1);
>>> }
>>>
>>> Question: How do I use it from D?
>>
>> //File: blah.d
>>
>> extern(C) int factorial(int n); //coincidentally identical to the C declaration.
>>
>> void main()
>> {
>> assert(factorial(3) == 6);
>> }
>>
>>
>> $ gcc -c factorial.c -ofactorial.o
>> $ dmd blah.d factorial.o
>> $ ./blah
>>
>> or
>>
>> $ gcc -c factorial.c -ofactorial.o
>> $ ar rcs libfactorial.a factorial.o
>> $ dmd blah.d -L-lfactorial
>> $ ./blah
>>
>>
>>
>> Basically, you just translate the header files from C to D, then link to the C implementation. See http://code.dlang.org/packages/dstep for automatic translation of headers.
>
> This is great.
> How practical (reliable ) is it to translate a large and complex header file like oci.h ( the interface for Oracle's database API ) to D?
By hand it's just laborious, but it's very simple.
Using dstep: It doesn't handle any pre-processor stuff, so a lot of complicated headers are out of the question. One approach is to run the pre-processor in gcc over the file, use dstep on the output, then reconstruct the conditional compilation stuff manually.
|
June 11, 2014 Re: Basics of calling C from D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On 11/06/14 16:22, Adam D. Ruppe via Digitalmars-d-learn wrote:
> On Wednesday, 11 June 2014 at 14:11:04 UTC, simendsjo wrote:
>> I believe the correct answer should be "Buy my book!".
>
> ah, of course! I should just make a .sig file lol
>
> http://www.packtpub.com/discover-advantages-of-programming-in-d-cookbook/book
>
> chapter 4 talks about this kind of thing :P
My copy arrived today.
Life is clearly going to be more fun. :-)
|
June 11, 2014 Re: Basics of calling C from D | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | On Wednesday, 11 June 2014 at 14:45:22 UTC, simendsjo wrote: > I must say I really like your writing-style as well as the down-to-earth and precise and concise presentation of the material. So kudos to you! thanks, don't forget to tell that to amazon review readers too :P > Really looking forward to reading some of the more advanced material as well as seeing your dconf presentation. Based on the pace of dconf posting, it'll probably be early July before it is online :( |
June 12, 2014 Re: Basics of calling C from D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Colin | On 6/12/2014 12:17 AM, Colin wrote: >> >> So a find an replace will do that for you quite easily. >> Other things like structs and typedefs are a bit more difficult >> to do with a find & replace. >> All the info you need is here anyway: >> wiki.dlang.org/Bind_D_to_C > > And here: > http://dlang.org/interfaceToC.html And: http://www.gamedev.net/page/resources/_/technical/game-programming/binding-d-to-c-r3122 |
Copyright © 1999-2021 by the D Language Foundation