Callbacks and interfacing with C

Alex Rønne Petersen alex at lycus.org
Tue Oct 30 03:15:55 PDT 2012


On 30-10-2012 11:13, Nick Sabalausky wrote:
> Ok, a C function pointer like this:
>
>      struct MyStruct{
>          int (*foo)(int);
>      };
>
> Translates to D as this:
>
>      struct MyStruct{
>          int function(int) foo;
>      }
>
> But what about calling conventions? There isn't any "int extern(C)
> function(int)" is there? Not sure if that would even make sense.
>
> So do you just make sure that whatever func you assign to it is an
> extern(C)? Or something else?
>

You generally do it this way:

alias extern (C) int function(int) MyFn;

struct MyStruct {
     MyFn foo;
}

This makes sure the calling convention is correct. In general, calling 
convention is part of both the function signature and function pointer 
type - function pointers just default to extern (D).

-- 
Alex Rønne Petersen
alex at lycus.org
http://lycus.org


More information about the Digitalmars-d-learn mailing list