Delegates and C function pointers
Nicolas Sicard via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Nov 8 07:43:32 PST 2014
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
More information about the Digitalmars-d-learn
mailing list