code:
var wString = Interop.Allocate((unicodeString.length*2));
var mbString = Interop.Allocate((unicodeString.length));
mbString.WriteString(0,unicodeString);
Interop.Call("Kernel32","MultiByteToWideChar", 65001, 0x8, mbString, unicodeString.length, wString, wString.Size);
That'll do your conversions for you, however wString.ReadString(0) doesn't read it all, stopping at null characters. I dunno if they are supposed to be there or not, the strings I get back look exactly like what the makeshift conversion gives me. Don't have time to mess around more, so see what you guys can do with it.