示例#1
0
 public static extern short  GT_GetPathOptErrorInfo(short crd, ref TErrorInfo errorInfo, short fifo);
示例#2
0
        /*public static string GetErrorsMessage() {
         * if (Errors.Length == 0) {
         *  return String.Empty;
         * }
         *
         * try {
         *  // снова логируем ошибки для удобного поиска
         *  DebugLogger.WriteInfo("\r\n\r\nСообщения об необработанных ошибках:\r\n");
         *  DebugLogger.WriteCriticalError(LogAreaCode.Core, Errors.ToString());
         * }
         * catch (Exception innerEx) {
         *  string sData = StringExtensions.SafeFormat(
         *                   "log exception in GetErrorsMessage():\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}",
         *                   innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);
         *  AddIfNeeded(sData);
         * }
         *
         * try {
         *  FileInfo fi = new FileInfo(NotEnginePath.PathSimpleCombine(AppDomain.CurrentDomain.BaseDirectory,
         *                             AppDomain.CurrentDomain.FriendlyName));
         *
         *  DateTimeFormatInfo fmt = new CultureInfo(String.Empty).DateTimeFormat;
         *  fmt.ShortDatePattern = "yyyy-MM-dd";
         *
         *  string exeFileName = StringExtensions.SafeFormat(
         *                         "Версия редактора: \"{0}\".\r\nДата обновления редактора пользователем \"{1}\": {2}\r\nВремя запуска редактора: {3}",
         *                         AppInfo.GetInstance().Version, AppDomain.CurrentDomain.FriendlyName,
         *                         fi.LastWriteTime.ToStrOrDefault(), AppInfo.GetInstance().StartAppTime);
         *
         *  Errors.Insert(0, "\r\n\r\n");
         *  Errors.Insert(0, exeFileName);
         * }
         * catch (Exception innerEx) {
         *  string sData = StringExtensions.SafeFormat(
         *                   "exception in GetErrorsMessage():\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}",
         *                   innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);
         *  AddIfNeeded(sData);
         * }
         *
         * return Errors.ToString();
         * }*/

        private static void AddIfNeeded(string message)
        {
            if (String.IsNullOrEmpty(message))
            {
                return;
            }

            TErrorInfo findedErrorInfo = _exceptionMessageList.Find((it => it.message.CompareTo(message) == 0));

            if (findedErrorInfo != null)
            {
                try {
                    DateTime dateTime  = DateTime.Now;
                    string   sDataTime = dateTime.ToStr();
                    // если есть такое же исключение: тип, название и само сообщение, то добавляем ссылку на предыдущее исключение
                    Errors.Append(StringExtensions.SafeFormat(
                                      "\r\nСсылка на ошибку (идентификатор: {0})\r\nВремя возникновения ошибки: {1}\r\n\r\n",
                                      findedErrorInfo.id, sDataTime));
                    return;
                }
                catch (Exception ex) {
                    if (!(ex is FormatException || ex is ArgumentException || ex is ArgumentNullException ||
                          ex is InvalidOperationException || ex is NotSupportedException || ex is StackOverflowException))
                    {
                        //
                        FatalExceptionHandler.Handle(ex);
                        return;
                    }
                    // если есть такое же исключение: тип, название и само сообщение, то добавляем ссылку на предыдущее исключение
                    Errors.Append(
                        StringExtensions.SafeFormat("\r\nСсылка на ошибку (идентификатор: {0})\r\n\r\n",
                                                    findedErrorInfo.id));
                    return;
                }
            }

            TErrorInfo errorInfo = new TErrorInfo();

            errorInfo.id      = -1;
            errorInfo.info    = String.Empty;
            errorInfo.message = message;

            try {
                DateTime dateTime  = DateTime.Now;
                string   sDataTime = dateTime.ToStr();
                errorInfo.info = String.Format(
                    "Идентификатор ошибки: {0}\r\nВремя возникновения ошибки: {1}",
                    _exceptionMessageList.Count, sDataTime);
                errorInfo.id = _exceptionMessageList.Count;
            }
            catch (Exception ex) {
                if (!(ex is FormatException || ex is ArgumentException || ex is ArgumentNullException ||
                      ex is InvalidOperationException || ex is NotSupportedException || ex is StackOverflowException))
                {
                    //
                    FatalExceptionHandler.Handle(ex);
                    return;
                }
            }
            finally {
                if (Errors.Length + errorInfo.message.Length + 8 < Errors.MaxCapacity)
                {
                    Errors.Append(StringExtensions.SafeFormat("\r\n{0}{1}\r\n", errorInfo.info, errorInfo.message));
                    _exceptionMessageList.Add(errorInfo);
                }
            }
        }