On 10.08.2017 15:22, Adam D. Ruppe wrote:
On Wednesday, 9 August 2017 at 23:52:00 UTC, Johnson Jones wrote:
extern(C) delegate(void*) {}


You should very rarely use extern(C) delegate... delegate is a D type, so the C function is almost certainly not actually receiving it.

Only time you'd want an extern(C) using D types like delegates, arrays, strings, etc., is if the receiver is actually also written in D.

idk if this would fix your problem, but it should be changed regardless.

gdk is actually using a function with arguments of type (extern(C) int function(void*),void*).

Anyway, I think there are use cases for extern(C) delegates too, along the following lines:

alias D=extern(C) int delegate(int);

struct F(S,T...){ // this struct is compatible with C
    void* ptr;
    extern(C) S function(void*,T) funptr;
    auto opCall(T args){
        return funptr(ptr,args);
    }
}

void main(){
    int y=2;
    D dg=(x)=>x+y;
    auto f=*cast(F!(int,int)*)&dg;
    import std.stdio;
    writeln(f(3));
}

Reply via email to