public UTF8StringHandle(string str)
: base(true) {
if (str == null) {
SetHandle(IntPtr.Zero);
return;
}
// +1 for '\0'
byte[] strbuf = new byte[Encoding.UTF8.GetByteCount(str) + 1];
Encoding.UTF8.GetBytes(str, 0, str.Length, strbuf, 0);
IntPtr buffer = Marshal.AllocHGlobal(strbuf.Length);
Marshal.Copy(strbuf, 0, buffer, strbuf.Length);
SetHandle(buffer);
}