Basics of calling C from D

belkin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 11 07:28:48 PDT 2014


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?


More information about the Digitalmars-d-learn mailing list