I wouldn't say that bridging non-visual .NET and COM components is an easy task, but at least this one is quite well documented nowadays. However, sometimes one needs to plug in a piece of UI developed in VB6 into a .NET client (or vice versa).
Well, I do know this is not a recommended scenario and a bad design practice. But if only all applcations we deal with were designed properly... the world would be a much better place! But since we leave in the real world, it's gonna cost us some sweat to “befriend” the legacy and the managed code.
Apparently, we need a common deniminator. And the good old window handle (HWND) will serve as the one. Both VB6 and .NET Windows Forms can easily give us the handle of a form. And both can rather easily consume Windows API. So-o... guess what? We are going one level down and employing the API level to establish the parent and child relationship between, say, the main .NET form and a child VB6 one through the SetParent API.
So, basically, what we need to do is to pass the handle of the parent window to the other side of the “bridge” and use the passed handle properly to become a “docile child”.