· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› GetLastError коды

Посл.отвђт Сообщенiе


Дата: Авг 26, 2003 13:14:18

Где бы посмотреть, что означают коды выдаваемые GetLastError?
Проблема в следующем создаю окно ListBox два раза, в первый раз окно создаётся нормально, а во второй CreateWindow возвращает 0, а GetLastError 120(дес.) т.е.78h.
Что означает этот код?


Дата: Авг 26, 2003 13:38:51

Тебе поможет FormatMessage


Дата: Авг 26, 2003 13:58:30 · Поправил: SolidCode

Я для своих программ написал такую функцию, чтобы не только себе сообщать о значении ошибки, но чтобы и пользователь знал. Разбери её. Авось поможет.

; «««««««««««««««««««««««««««««««««««««««
.const
nEF_KILL equ 1
nEF_GETCODE equ 2

.data
fater db "Фатальная ошибка!",13,10,0
apper db "Системная ошибка!",13,10,0
extinf db 13,10,"Расширенная информация:",13,10
db "Код ошибки: %lu (%lXh)",13,10
db "Системное описание ошибки:",13,10
db "%s",0
killapp db 13,10,"Программа будет закрыта.",0



.code
align 16

ErrorMsg proc hParentWnd:DWORD,\
lpszMsg:DWORD,\ ;ptr to application defined error message
nEFlag:DWORD,\ ;if 0 then no ErrCode and Sys Err Message displayed
nMBFlag:DWORD ;the flags to pass to MessageBox

LOCAL StrBuf[512]:BYTE ;buffer for the final message
LOCAL ExtInfo[512-8]:BYTE ;buffer for extended info
LOCAL nErrCode:DWORD ;keep the error code here
LOCAL ptrSysErr:DWORD ;ptr to buffer allocated by FormatMessage with FORMAT_MESSAGE_ALLOCATE_BUFFER flag

.IF nEFlag & nEF_GETCODE ;if need to have error code, get it with GetLastError
invoke GetLastError
mov nErrCode,eax
xor ecx,ecx
lea edx,ptrSysErr ;and get the system description of the error
push eax
invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,ecx,\
eax,ecx,edx,ecx,ecx
pop eax
invoke wsprintf,addr ExtInfo,offset extinf,eax,eax,ptrSysErr
invoke LocalFree,ptrSysErr
.ENDIF
lea edx,StrBuf
.IF nEFlag & nEF_KILL ;do the first line of message
push offset fater ;"Fatal Error"
.ELSE
push offset apper ;"Application Error"
.ENDIF
push edx
call lstrcpy
invoke lstrcat,addr StrBuf,lpszMsg ;add to message your own words passed to the function
.IF nEFlag & nEF_GETCODE
invoke lstrcat,addr StrBuf,addr ExtInfo ;if extended info accuired, add it to the message
.ENDIF
.IF nEFlag & nEF_KILL
invoke lstrcat,addr StrBuf,offset killapp ;if KILL flag set, inform user about it
.ENDIF
invoke MessageBox,hParentWnd,addr StrBuf,offset AppName,nMBFlag ;show the message box
.IF nEFlag & nEF_KILL ;if KILL flag set, free resources and exit application
;ExitApp simply frees the resources occupied by the program
call ExitApp
invoke ExitProcess,0
.ENDIF
ret
ErrorMsg endp


Дата: Авг 26, 2003 14:14:18

Всем большое спасибо.
Ошибку нашёл глупость конечно, забыл после Класса окна ноль зарезервировать, что бы чтрока нулём заканчивалась.


Дата: Авг 26, 2003 14:23:38

В аттаче тулзень ErrorShow.

Или:
include ReportLastError.asm

Где нужно показать описание последней ошибки:
invoke ReportLastError

Процедура сохраняет все регистры и флаги.

775690126__LastError.rar


Дата: Авг 26, 2003 16:59:46

Посмотри

_1942943100__winerror.zip


Дата: Сен 1, 2004 18:34:26

Добрый день.
Подскажите пожалуйста какой 32-битн. код должна вернуть функция GetLastError(), чтобы его расшифровка находилась в netmsg.dll. Спасибо.


Дата: Сен 1, 2004 19:13:01

Если надо один раз узнать что за ошибка, то можно и без программирования.
net helpmsg <номер>
Например:
E:\>net helpmsg 2

The system cannot find the file specified.


Дата: Сен 1, 2004 19:57:39

гм, а ErrorLookup из комплекта MSVS уже отменили чтоли?


Дата: Сен 2, 2004 10:40:33

flankerx
Конечно, отменили. Вместе с winerror.h из PSDK :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073