Hi,

my D application uses a Dll written in another language.
In my D code I retrieve the address of a delegate as integer:

int dgRef = cast(int) &(dg);

This integer I pass to a function in the dll together with the
address of a callback function.

extern(C) static void notifyEventCallback(int reference1)
{
        if (auto dg = *cast(NotifyEvent*)cast(void*) reference1)
        {
                writeln("HERE1");
                dg(null);
                writeln("HERE2");
        }
}

The callback function casts the integer back to the delegate
and execute it.

This scenario is working fine if in the dll function the callback
immediatelly is called. But my real scenario is not working.
The dll shows an UI and the callback should be called on a
button press in the UI.
In this scenario the callback is called, the cast is successful
and HERE1 is shown but neither the dg is called (has a dummy writeln as coding)
nor HERE2 is shown.

I have no idea why the cast can be succesful but the call to dg(null) is silently failing. Do you have any idea? Maybe the UI button press runs in another thread and causes this issue?

Kind regards
André

Reply via email to