Страница: 1 |
Страница: 1 |
Вопрос: Обработка ошибок Win Api
Добавлено: 13.05.07 12:02
Автор вопроса: Arvitaly | Web-сайт:
Привет, кто-нибудь знает функцию перехвата ошибок API, аналог on error???
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 13.05.07 12:25
Привет, вы не прошли квалификацию в подготовительную группу и остаётесь на повторное обучение в средней.
Занятие по теме "Функции API, кроме отдельно стоящей микроскопической группы, не вызывают исключений вообще, а вместо этого возвращают признак успеха или неудачи" будет завтра, не опоздайте.
Номер ответа: 2
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #2
Добавлено: 13.05.07 12:37
Нет, какая-то функция была, просто я не помню и найти не могу.
А, например, если прога не завершается аварийно, то есть функция GetLasError()
А есть еще какая-то для перехвата ошибки раньше OS WINDOWS
Номер ответа: 3
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #3
Добавлено: 13.05.07 13:14
Можно проанализировать стек, раскрутить SEH-chain и внедриться туда. Дерзай!
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 13.05.07 18:22
Вообще-то все апи (ну может почти все) возвращают результат своей работы (т.е. ошибки отлавливаются именно через этот возвращаемый результат)
Номер ответа: 5
Автор ответа:
VisualPaul
ICQ: 402519798
Вопросов: 12
Ответов: 111
Профиль | | #5
Добавлено: 13.05.07 18:37
Ага. Примеры:
Public Declare Function ShowCaret Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CloseMetaFile Lib "gdi32" (ByVal hMF As Long) As Long
Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
Public Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
Public Declare Function PlaySound Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Public Declare Function PlayMetaFile Lib "gdi32" (ByVal hdc As Long, ByVal hMF As Long) As Long
Public Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint() As POINTAPI, ByVal nCount As Long) As Long
Public Declare Function CopyMetaFile Lib "gdi32" (ByVal hMF As Long, ByVal lpFileName As String) As Long
Public Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Public Declare Function CreateMetaFile Lib "gdi32" (ByVal lpString As String) As Long
Public Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Public Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long
Public Declare Function MessageBox Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Public Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long
Все long int.Значения узнать легко.Например:
Далее понятно
Номер ответа: 6
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 13.05.07 20:42
GSerg, а какие апи вызывают вбшные исключения?
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 13.05.07 21:00
Кто сказал VBшные?.. Там такое не написано, там написано исключения... EnterCriticalSection, например.
Номер ответа: 8
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #8
Добавлено: 14.05.07 08:54
АПИ не вызывают вбшных ошибок. ВБ-ошибки надо отлавливать с помощью вбшных средств
' код
Exit Sub
metka_obrabotchika_oshibki:
MsgBox Err.Description
Resume Next
или
' код
' место, где возможна ошибка
If Err.Number>0 Then MsgBox Err.Description
' код
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 14.05.07 13:53
АПИ достаточно часто вызывают GPF. При желании отследить можно, а вот продолжить после них работу - довольно сложно. Я как то пытлася, и лучше что вышло - это логирование ошибки в файл с последующим завершением работы. Ну, может в некоторых случаях за счет раскруки стека и можно...
Номер ответа: 10
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #10
Добавлено: 14.05.07 16:36
да, речь именно об GPF, и в какой-то книге я прочитал давно уже что было что то прям стандартное, давно была я внимание не обратил, а вот теперь понадобилось а вспомнить не могу и книжку кто-то спер
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 14.05.07 17:11
Ну можешь попробовать SetUnhandledExceptionFilter, однако не обнадеживайся - такие ошибки, как правило, не возобновляемые...
Номер ответа: 12
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #12
Добавлено: 15.05.07 15:02
SEH может и не помочь, ибо внутри функций устанавливаются свои фреймы. А вот векторная обработка исключений(VEH) тебе поможет.