Running a delegate inside a C function

Chris Cain via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 7 14:48:51 PDT 2014


On Saturday, 7 June 2014 at 21:18:39 UTC, Denis Martinez wrote:
> 2. Is it possible to make a delegate to be allocated on the 
> heap ?
> I think of a syntax such as:
>   client.process_callback = new delegate int(jack_nframes_t 
> nframes) {

AFAIK, no.

> 3. I have coded a workaround for the time being.
> The function here copies the delegate into a heap-allocated 
> structure, and takes the interior pointer.
>
>   T *copyDelegate(T)(T dg) {
>     struct Tmp { T dg; }
>     auto x = new Tmp;
>     x.dg = dg;
>     return &x.dg;
>   }

I'll have to note that if you're passing this somewhere in C, D 
won't be keeping track of it automatically anymore. Thus, it's 
very likely your delegate will be garbage collected at some point 
(thus the memory might be repurposed for other things causing a 
similar issue to what you're having now).

Ultimately, I think if you want to keep the delegate around it's 
probably simpler to store it somewhere and use the pointer to 
that somewhere. See: http://dlang.org/interfaceToC.html for more 
info.


More information about the Digitalmars-d-learn mailing list