On Mon, 07 Feb 2011 10:28:41 -0500, GreatEmerald <past...@gmail.com> wrote:

Everything is right from what I can tell. This is the code I use for the D part:

module dpart;
import std.c.stdio;

extern(C):

    shared int ResultD;

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

And the C part:

#include <stdio.h>
extern int ResultD;
int Process(int Value);

int main()
{
        printf("Sending 3...\n");
        Process(3);
        printf("The result is %d\n", ResultD);
        getchar();
        return 0;
}

This is pretty much the same thing as in the Windows version, just with scanf()
omitted.

Jacob, in Windows I am required to explicitly tell DMD to compile phobos.lib, but
not in Linux. Quite odd.

The issue is that you are not calling the D runtime initialization code. This is required in order to get D working properly. See the C main function in druntime here:

https://github.com/D-Programming-Language/druntime/blob/master/src/rt/dmain2.d#L335

Basically, you are going to have to duplicate the runtime startup code. I'm not sure it will work properly. People typically run main from D and call their C functions from there. This is also certainly an option.

The errors you are getting are link errors. I'm guessing that maybe because you aren't calling the d runtime, the linker is opimizing out the deh code early on, but then needs it again later? Not sure.

-Steve

Reply via email to