<p>I am calling an unmanaged C++ dll that expects a char* as one of its parameters and I want to push a byte[] into it.  The project is written in VB.NET. </p>

<p>What type of marshalling will work for this?</p>

I'm not a .net expert, but I've needed to do something similar recently.
It is not just a matter of serialization, you also have to stop the garbage collector from cleaning up your byte array while it is being used in C++ land...
The below snippet of C# should help.
```
// pin the byte[] (byteArray)  
GCHandle handle = GCHandle.Alloc(byteArray, GCHandleType.Pinned);   
IntPtr address = handle.AddrOfPinnedObject();  
// Do your C++ stuff, using the address pointer.

// Cleanup 
handle.Free();
```