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;
    }