I have no concrete idea of what's inside your MiniBI class, but while we're talking about arrays, here's a thread with an interop layer that demonstrates passing a vector of strings from managed to native code: http://www.codeguru.com/forum/showthread.php?t=511781. (If you want to skip the preliminaries: The interop code is in post #19.) The method Test21::Song::Play() is the relevant one.

Note that this is the only half-way notable piece of interop code I've ever written, so there's some chance something in there is suboptimal in some way or plain wrong. At least it behaved as expected...

The source container on the .NET side in that code is a cliext::vector that I really don't recommend for general use, but as the method processes the items one by one it would work with pretty much any .NET container.

If you ignore the part of the code that converts the managed strings to native ones, the method decays to something nearby trivial. I don't know much about the memory layout of managed arrays, but if the items in your array are value types with a memory layout matching that of a native type, I suppose there even is a one-line solution. But since I'm not really an interop expert either, I'd need to research that first. (IIRC there's a Marshal class with static methods somewhere.)

Quote Originally Posted by AKRichard View Post
[...] native c++ doesnt even understand reference semantics right?
Well, it does, just not those of .NET. The .NET tracking handles actually have more similarities with native pointers than with native references, yet they don't have an equivalent in the native world. That's why I was concerned about using the term "reference semantics" above at all: If that term really has an "official" meaning in .NET, that meaning is different from its meaning in native C++.

as Ive said before I chose managed c++ when teaching myself, now I really wish I had started with native c++.
Though native C++ and C++/CLI have similar names, look similar and in fact have a bunch of commonalities, they're pretty different languages. In particular, native C++ is much more low-level. As it looks like you know how to write assembly language, which usually implies one likes low-level stuff, yes, chances are native C++ would have been preferable. But what's stopping you from learning that now?