I've been working on ways to handle the DccManSink class defintion, and how I will raise events to managed classes that subscribe to the events. After experimenting with gcroot, I was able to prototype a working model.
It turns out that you can declare code similar to the following:
// Delegate definition
delegate void DelegateDefinition(UInt32 x);
// In your class you can do something like this:
msclr::gcroot<DelegateDefinition^> _MyDelegate;
// However the most important thing I found out is that
// I can construct code like the following in my unmanaged
// method
unsigned int i = 0;
for each(DelegateDefinition^ dd in _MyDelegate->GetInvocationList())
{
dd->Invoke(++i);
}
Armed with this knowledge, I was able to build a working protype for calling multicast delegates from a C++/CLI native class. I've posted a console application on my wiki: Experiments in calling managed delegates