Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Свободные Windows Error - ы :)   Найти похожие ветки 

 
Riply ©   (2007-12-16 16:04) [0]

Здравствуйте !
В связи с успешным "пложением" ошибок в своих программах,
понадобилось определить для них свои Error - коды. :)
Естественно хочеться, чтобы они не "пересекались" с Windows - кими.
Как можно узнать свободные значения для них,
кроме как вызывать SysErrorMessage для каждого и смотреть знает ли она такую ошибку или нет ?

P.S.
Ну заодно подскажите тоже самое и для NTSTATUS  :)


 
Правильный_Вася   (2007-12-16 16:10) [1]

http://www.gregorybraun.com/MSWinErr.html


 
Anatoly Podgoretsky ©   (2007-12-16 16:16) [2]

> Riply  (16.12.2007 16:04:00)  [0]

> кроме как вызывать SysErrorMessage для каждого и смотреть знает ли она такую ошибку или нет ?

Это ничего не дает, виндоус не замороженная система.


 
guav ©   (2007-12-16 16:23) [3]

Ага, а ещё HRESULT. и коды SEHовских ексепшнов, интерпретация всего этого та же.
Рекомендую читать Рихтера самую первую главу.
Для своих ошибок должен быть установлен соответствующий флаг в 29ом бите.
GetLastError значения - это вроде те же NTSTATUS.

Не все виндовс коды получаются из SysErrorMessage, например для ошибок WinInet надо указывать в FormatMessage хендл dllки WinInet


 
guav ©   (2007-12-16 16:24) [4]

> GetLastError значения - это вроде те же NTSTATUS.

Без старших битов только.


 
guav ©   (2007-12-16 16:33) [5]

> [1] Правильный_Вася   (16.12.07 16:10)

Коды во внешних дллках, типа вининетовских там не показываются, т.к. там вообще нет подключения внешней длл.
Поэтому лучше Error Lookup если юзать студию, или самому сделать.

Вот полезная цитата из WinError.h

//
// Map a WIN32 error value into a HRESULT
// Note: This assumes that WIN32 errors fall in the range -32k to 32k.
//
// Define bits here so macros are guaranteed to work

#define FACILITY_NT_BIT                 0x10000000

// __HRESULT_FROM_WIN32 will always be a macro.
// The goal will be to enable INLINE_HRESULT_FROM_WIN32 all the time,
// but there"s too much code to change to do that at this time.

#define __HRESULT_FROM_WIN32(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))

#ifdef INLINE_HRESULT_FROM_WIN32
#ifndef _HRESULT_DEFINED
#define _HRESULT_DEFINED
typedef long HRESULT;
#endif
#ifndef __midl
__inline HRESULT HRESULT_FROM_WIN32(long x) { return x <= 0 ? (HRESULT)x : (HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);}
#else
#define HRESULT_FROM_WIN32(x) __HRESULT_FROM_WIN32(x)
#endif
#else
#define HRESULT_FROM_WIN32(x) __HRESULT_FROM_WIN32(x)
#endif

//
// Map an NT status value into a HRESULT
//

#define HRESULT_FROM_NT(x)      ((HRESULT) ((x) | FACILITY_NT_BIT))


 
Riply ©   (2007-12-16 16:46) [6]

Ух ты !
Спасибо !
Вот теперь, с чистой совестью, можно допускать ошибки сколько душе угодно :)


 
guav ©   (2007-12-16 16:52) [7]

Насчёт SEH эксепшнов я может и погорячился, что они совпадают по значению с кодами, но я точно помню, что успешно отбрасыал у NTSTATUS старшие биты и вводил результат в Error Lookup и сообщения были правильными.


 
Riply ©   (2007-12-16 16:55) [8]

>  [7] guav ©   (16.12.07 16:52)
> успешно отбрасыал у NTSTATUS старшие биты и вводил
> результат в Error Lookup и сообщения были правильными.

А почему не пользовался RtlNtStatusToDosError ? (надеюсь не ошиблась в названии)
С ней вроде как надежнее, или она делает то же самое ?


 
guav ©   (2007-12-16 17:00) [9]

Да, и кроме того, ещё аргумент в пользу Error Lookup из студии,

> http://www.gregorybraun.com/MSWinErr.html

HRESULTы сюда вводить трудно, надо их переводить в положительные десятичные


 
guav ©   (2007-12-16 17:13) [10]

> А почему не пользовался RtlNtStatusToDosError ?

Проверил. Был не прав. Однако для интересующих меня ошибок смысл примерно тот же.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
15-1197267417
Slider007
2007-12-10 09:16
2008.01.13
С днем рождения ! 10 декабря 2007 понедельник (день тяжелый)


2-1197472090
account1024
2007-12-12 18:08
2008.01.13
Кол-во элементов TreeView


15-1197018644
Greench
2007-12-07 12:10
2008.01.13
Скобки в арифметическом выражении


2-1197574861
..::KraN::..
2007-12-13 22:41
2008.01.13
Hot key в TRichEdit.


3-1189063272
AndrewK
2007-09-06 11:21
2008.01.13
Вычисляемые поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский