Ooh, thanks, it works! Though linking in Linux is still quite odd. So
the final code for my test program is this:

==== cpart.c ====
#include <stdio.h>

extern int ResultD;

int Process(int Value);
int rt_init();
int rt_term();
void LinuxInit();

int main()
{
        int num;
        
        rt_init(); //Init D library
        LinuxInit(); //Code for linking in Linux
        
        printf("Enter a number\n");
        scanf("%d", &num);
        Process(num);
        printf("The result is %d\n", ResultD);
        getchar();
        
        rt_term(); //Terminate D library
}

==== dpart.d ====
module dpart;
import std.stdio;

version(linux)
        int main() { return 0; }
extern (C) bool  rt_init( void delegate( Exception ) dg = null );
extern (C) bool  rt_term( void delegate( Exception ) dg = null );

extern(C):
        shared int ResultD;

        int Process(int Value)
        {
                writeln("You have sent the value: ", Value);
                ResultD = (Value % 5);
                return ResultD;
        }

        void LinuxInit()
        {
                version(linux)
                        main();
        }

==== commands to compile ====
On Linux:
dmd -m32 -c -lib dpart.d
gcc -m32 -c cpart.c
dmd -m32 cpart.o dpart.a /usr/lib/libphobos2.a

On Windows:
dmd -c -lib dpart.d
dmc -c cpart.c
dmd cpart.obj dpart.lib phobos.lib
Or:
dmd -lib dpart.d
dmc cpart.c dpart.lib C:\D\dmd2\windows\lib\phobos.lib


Though I find it quite odd that I need workarounds like those to
compile on Linux, but ah well, it works, at least. Also odd that I
can't link using GCC on Linux, it gives me a long list of undefined
references (it seems that they are all coming from phobos2, it's here
if you wish to look through it: http://pastebin.com/cfyMDzDn ). But
once again, at least it works now, so thanks a lot!

Reply via email to