private string GetTextFromCommonDialog(IntPtr hWnd, uint msg) { string str = null; var buffer = Marshal.AllocCoTaskMem(2 * InteropUtil.NumberOfFileChars); try { hWnd.SendMessage(msg, InteropUtil.NumberOfFileChars, unchecked((uint)buffer)); var chars = new char[InteropUtil.NumberOfFileChars]; Marshal.Copy(buffer, chars, 0, chars.Length); var firstZeroTerm = ((IList)chars).IndexOf('\0'); if (firstZeroTerm >= 0 && firstZeroTerm <= chars.Length - 1) { str = new string(chars, 0, firstZeroTerm); } } finally { Marshal.FreeCoTaskMem(buffer); } return str; }