On Thursday, 12 December 2013 at 11:11:55 UTC, bearophile wrote:
Gary Willoughby:

alias void function(ClientData clientData, Tcl_Interp* interp)
 Tcl_InterpDeleteProc;

extern (C) void Tcl_CallWhenDeleted(Tcl_Interp* interp, Tcl_InterpDeleteProc proc, ClientData clientData);

With recent D compilers I prefer the alias with "=" and a more
aligned colums formatting of the arguments when they don't fit
well in a line:


alias Tcl_InterpDeleteProc = void function(ClientData clientData,
Tcl_Interp* interp);

extern(C) void Tcl_CallWhenDeleted(Tcl_Interp* interp,
                                    Tcl_InterpDeleteProc proc,
                                    ClientData clientData);

Also, can't you add some "const" in those arguments? Is your C
function pure? It should be nothrow.

Bye,
bearophile

I guess alias also should include extern(C) declaration i.e. the right way is alias Tcl_InterpDeleteProc = extern(C) void function(ClientData clientData, Tcl_Interp* interp) nothrow;

So your callback on D side must have C-linkage too.
Lack of extern(C) in alias probably will not cause problem on Linux, but in my experience, Windows requires it otherwise you will get seg fault.

Reply via email to