Форум: "Начинающим";
Текущий архив: 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