public static IntPtr StringToHGlobalUtf8(string aStr)
{
if (aStr == null)
return IntPtr.Zero;
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(aStr);
IntPtr ptr = Marshal.AllocHGlobal(bytes.Length + 1);
Marshal.Copy(bytes, 0, ptr, bytes.Length);
Marshal.WriteByte(ptr, bytes.Length, (byte)0);
return ptr;
}