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