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?

You can do a lot of it by simply doing a find and replace in the
file.
For example, all C definitions of:
unsigned char x
become:
ubyte x

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

Reply via email to