On Saturday, 8 November 2014 at 15:29:01 UTC, Gary Willoughby
wrote:
On Saturday, 8 November 2014 at 12:23:45 UTC, Nicolas Sicard wrote:
I would like to register a D delegate to a C API that takes a
function pointer as a callback and a void* pointer to pass data
to this callback.

My solution is in http://dpaste.dzfl.pl/7d9b504b4b965.

Is this code correct? Is there something simpler or already in
Phobos that I have overlooked?

Thanks
-- Nicolas

It looks very similar to what i'm doing here:
https://github.com/nomad-software/tkd/blob/master/source/tkd/element/element.d#L174

I think you can simplify it though by just using a delegate member in the data struct. Like this (untested):


static struct Data
{
        void delegate() callback;
}

static extern(C) void adapter(void* ptr)
{
        auto d = *(cast(Data*) ptr);
        d.callback()
}

Yes that's simpler! Thanks.

-- Nicolas

Reply via email to