Pointers in extern DLL functions
Xavi
____nospam at nospam.com
Sat Dec 22 07:23:08 PST 2007
Jarrett Billingsley Wrote:
> "Xavi" <____nospam at nospam.com> wrote in message
> news:fkhvrp$n0s$1 at digitalmars.com...
> > Hi all,
> >
> > I have a doubt, for example; is safe to send the pointer returned by
> > toUTF16z() to a DLL extern function like in this code?
> > Can the GC delete it while the extern function is running? Do I need to
> > keep it in a variable to avoid its deletion?
> >
> > capCreateCaptureWindowW(toUTF16z(title), 0, 0, 0, 0, 0, hwnd, 0);
>
> The D GC is not asynchronous. It will only collect on allocations.
> Therefore, as long as this function doesn't allocate any memory *in your
> app* (and it looks like it's a Windows API, so it doesn't look like that'll
> happen) no collections can happen. Even if one did, the reference to the
> intermediately converted string would be sitting on the stack or in a
> register and therefore it wouldn't be collected.
>
> > And in this code using a cast? Is there any possible problem here?
> >
> > SendMessageW(hwnd, 0, 0, cast(uint)toUTF16z(file));
>
> Not unless the GC becomes extremely precise and keeps track of exactly what
> type every local variable is, which doesn't seem likely any time soon. In
> this case, even though it's a uint, it'll still be pointing into the GC heap
> and won't be collected.
>
>
Ok, thank you very much ; )
More information about the Digitalmars-d-learn
mailing list