I found this page that describes how to call c functions from D.

I found this page that describes how:
http://arsdnet.net/dtips/#cfunc

on that page he uses gcc, and I use dmc, but I get different results. This is what I did

// cfile.c file
extern int globalFromD;

void functionFromC(int a) {
   globalFromD = a;
}
// end cfile.c

// dfile.d
extern(C) { // this is needed to make it available from C
        int globalFromD;
}
extern(C) { // also needed when listing the prototypes for your C functions
        void functionFromC(int);
}

import std.stdio; // for writefln

int main() {
        globalFromD = 100;
        writefln("%d", globalFromD);

        functionFromC(500);
        writefln("%d", globalFromD);

        return 0;
}
// end dfile.d

I compile with:
dmc -c cfile.c
And I get  an cfile.obj, which is the object code (.o in gcc).
Then I compile the D code
dmd dfile.d cfile.obj
and I get no errors, so I run it, the result:
// start result
C:\DCode\libtest>dfile.exe
100
100

C:\DCode\libtest>
// end result

Why is it still 100? It should be 500. I don't think functionFromC( int ) is being called, and I can't really find any other sources that clearly explain how to do this simple stuff, so can anyone explain how to fix it?

Reply via email to