@Partial, you raise an important point. You cannot pass a .NET "object" back to C++ (unless it's Managed C++) because .NET object semantics are not the same as C++ object semantics.
@Cute: you can, however, pass COM Interface Pointers. If you need your "traditional C++" code to talk to .NET objects, use COM Interfaces, not objects.
Make sure your object is marked as a COM object, and that you implement a suitable Interface that contains the methods that your C++ needs. Then, pass an array of the Interface references back to the C++ code. The C++ code should get a SafeArray of COM interface pointer, which it can manipulate with the usual COM semantics (AddRef(), etc.).