Question about function aliases

dnewbie run3 at myopera.com
Wed Dec 11 16:51:54 PST 2013


On Wednesday, 11 December 2013 at 23:42:44 UTC, Gary Willoughby 
wrote:
> For example i have some C code like this:
>
> typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData 
> clientData, Tcl_Interp *interp));
>
> void Tcl_CallWhenDeleted(Tcl_Interp* interp, 
> Tcl_InterpDeleteProc* proc, ClientData clientData);
>
>
> I intend on converted this to D thus:
>
> alias void function(ClientData clientData, Tcl_Interp* interp) 
> Tcl_InterpDeleteProc;
>
> void Tcl_CallWhenDeleted(Tcl_Interp* interp, 
> Tcl_InterpDeleteProc* proc, ClientData clientData);
>
> Is it correct keeping the * with the Tcl_InterpDeleteProc 
> parameter or do i remove it? Is the alias above a function 
> pointer?
>
> To call this function can i use a function literal for the 
> Tcl_InterpDeleteProc parameter? or do i need to pass an address 
> of the function?

It's a function pointer.
Test:

import std.stdio;
alias extern(C) void function(void*) Callback;

void Call(Callback c)
{
     c(c);
}

extern(C) void callback(void* v)
{
     writefln("v: %04X", v);
}
	
void main()
{
     Callback c = &callback;
     Call(c);	
     writefln("c: %04X", c);
}


More information about the Digitalmars-d-learn mailing list