Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# - получение кода системной ошибки, Как C#-коду получить код системн. ошибки 
V
    Опции темы
valent_N
Дата 3.1.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 9.8.2003
Где: Рига, Латвия

Репутация: нет
Всего: 1



Здравствуйте!
C#-программа должна обрабатывать ошибки с учетом их кода. Какой культурный способ существует для получения кода системной ошибки и сброса ее, аналогично тому, как это позволяют сделать Win32 API-функции GetLastError() и SetLastError(...)? Или, все же, надо вызывать именно их, обеспечив для них соответствующие прототипы? Или же надо прибегнуть к исключению? Как тогда получить из экземпляра исключения код ошибки? - я не смог найти в MSDN такую информацию.
Большое Спасибо

PM MAIL   Вверх
Void
Дата 3.1.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Посмотрите на метод System.Runtime.InteropServices.Marshal.GetLastWin32Error и класс исключения System.ComponentMode.Win32Exception.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
WTF
Дата 3.1.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.12.2005

Репутация: нет
Всего: нет



Не совсем понятно о каких системных ошибках идет речь. Наиболее распространенные ошибки реализованы в виде исключений (exceptions). Например:
Код

try
{
    // этот код генерирует ошибку
    DoSomthing();
}
catch(OutOfMemoryException ex)
{
    // обработка ошибки
}


Если стандартные классы исключений по како-то причине тебе не подходят - у класса System.Exception есть свойсво HRESULT который содержит код ошибки.

Сбрасывать ошибку не надо.
PM MAIL WWW   Вверх
Exception
Дата 3.1.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(WTF @ 3.1.2006, 16:30)
Сбрасывать ошибку не надо.

Это он говорит о стандартных ошибках Win32.
Полностью согласен с
Void.
А вообще не пойму, что мешает пользоваться
Цитата(valent_N @ 3.1.2006, 16:18)
GetLastError() и SetLastError(...)

?
PM   Вверх
Void
Дата 3.1.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Цитата(Exception @ 3.1.2006, 17:53)
А вообще не пойму, что мешает пользоваться

Читай документацию на Marshal.GetLastWin32Error smile Там ясно сказано:
Цитата
GetLastWin32Error exposes the Win32 GetLastError API method from Kernel32.DLL. This method exists because it is not safe to make a direct platform invoke call to GetLastError to obtain this information. If you want to access this error code, you must call GetLastWin32Error rather than writing your own platform invoke definition for GetLastError and calling it. The common language runtime can make internal calls to APIs that overwrite the operating system maintained GetLastError.



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
valent_N
Дата 3.1.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 9.8.2003
Где: Рига, Латвия

Репутация: нет
Всего: 1



Очень всем признателен за внимание к моему вопросу. Я с Вашей помощью смог разобраться и получить полезную информацию, которую сам не смог найти.


Цитата(Exception @ 3.1.2006, 15:53)
А вообще не пойму, что мешает пользоваться


Хотелось узнать, какой метод более рационален.

Большущее ВСЕМ СПАСИБО!!!
PM MAIL   Вверх
Exception
Дата 3.1.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А SetLastError тама разве есть?
PM   Вверх
arilou
Дата 4.1.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Exception @ 3.1.2006, 16:05 Найти цитируемый пост)

А SetLastError тама разве есть?

А SetLastError нужен для апишных ф-ций. Для .NET приложений не нужен.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
redig
Дата 14.2.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Цитата(valent_N @ 3.1.2006,  15:18)
Здравствуйте!
Какой культурный способ существует для получения кода системной ошибки?

Я так и не понял из этого топика как получить код ошибки. у меня например такая ситуация:
Вываливаются ошибки:
14.02.2007 12:05:48|Ошибка OutSocket() : Object reference not set to an instance of an object.
14.02.2007 12:06:46|Ошибка OutSocket() : Удаленный хост принудительно разорвал существующее подключение

на одном Exception-e:
Код

        public static void OutSocket()
        {
            try
            {
                Data msgToSend = new Data();

                msgToSend.cmdCommand = Command.Logout;
                msgToSend.strName = CLName;
                msgToSend.strMessage = null;

                byte[] byteData = msgToSend.ToByte();

                //Send it to the server
                clientSocket.Send(byteData, 0, byteData.Length, SocketFlags.None);
                clientSocket.Close();
                               

            }
            catch (Exception ee)
            {
                LogingClass.SaveLoging(DateTime.Now.ToString() + "|Ошибка OutSocket() : " + ee.Message);
                //MessageBox.Show("Ошибка OutSocket() : " + ee.Message);
            }
        }


Тут говорили про HResult, в MSDN-е не понятно написано, если кто знает, покажите пожалуйста примером как вытащить из Exception-а код ошибки.



Это сообщение отредактировал(а) redig - 14.2.2007, 06:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.