Declaring a D pointer to a C function

Steven Schveighoffer schveiguy at yahoo.com
Tue Jul 12 06:01:38 PDT 2011


On Tue, 12 Jul 2011 05:36:15 -0400, Johannes Pfau <spam at example.com> wrote:

> From a discussion related to derelict:
> How do you write this:
> -------------------------------------------------------
> alias extern(C) int function(void* test) FTInitFunc;
> FTInitFunc FT_Init_FreeType
> -------------------------------------------------------
> without the alias?
> -------------------------------------------------------
> extern(C) int function(void* test) FT_Init_FreeType;
> -------------------------------------------------------
> is not the same!
> both are fields containing a C function pointer, but the first field
> has D name mangling (_D4test16FT_Init_FreeTypePUPvZi) and the second
> has C name mangling: (FT_Init_FreeType, which conflicts with the C
> function FT_Init_FreeType)
>
> And a related question from stackoverflow:
> (http://stackoverflow.com/questions/6257078/casting-clutteractor-to-clutterstage)
> How to write this:
> -------------------------------------------------------
> alias extern(C) void function(void*, const char*) setTitleFunc;
> auto clutter_stage_set_title =
> getSym!(setTitleFunc)("clutter_stage_set_title");
> -------------------------------------------------------
> without the alias?

extern(C) extern(C) maybe?  :)

or maybe:

extern(C) int function(void * test) extern(C) FT_Init_FreeType;

Just some thoughts, it probably doesn't work.

-Steve


More information about the Digitalmars-d-learn mailing list