Just pull out the useful part from the link. http://blogs.microsoft.c.il/blogs/alon/archive/2007/05/29/Native-Callback.aspx I genrally use method #4 because many of my callbacks are in the form of interface classes (e.g. "ICallback"). I create a "bridge" class (unmanaged class built in a managed dll) with an implementation of the unmanaged callback that marshals any parameters to the managed world, then calls a similar method on a gcroot'ed handle to a managed interface.
Bob Ciora