Страница: 1 |
Страница: 1 |
Вопрос: API Errors
Добавлено: 22.11.05 15:37
Автор вопроса: LamerOnLine | ICQ: 334781088
Собсно, сабж. Как на VB можно захэндлить ошибки апишных библиотек, чтобы они не приводили к сбою всего приложения?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 22.11.05 16:56
Проверяй возвращаемое значение.
А вообще я первый раз слышу, чтобы от того, что некоторая апи вернула код ошибки, происходил сбой.
Си-шные ф-ции могут привести к сбою, т.к. очень редко кто из них индицирует ошибку
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 22.11.05 17:05
Не, тут фокус в другом )
Типичный пример - CopyMemory. Получить код ошибки от неё проблематично, а вот завалить весь процесс - запросто.
В сях есть возможность хендлить подобные ошибки (хотя и не все), а вот ВБ с его возобновляемой системой обработки класть на них хотел. Как результат - никакое обеспечение надежности.
Номер ответа: 3
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #3
Добавлено: 22.11.05 17:43
В случае с CopyMemory (и не только) проблема решается вызовом
IsBadReadPtr и IsBadWritePtr. Если процесс имеет права чтения и записи src и dest - можно смело копировать.
Фантастический для vb вариант: SetUnhandledExceptionFilter.
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 23.11.05 04:01
Номер ответа: 5
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #5
Добавлено: 23.11.05 12:00
Нет необходимости проверять все страницы по отдельности, параметр ucb не ограничен размером страницы. Пример:
mov ebx,eax
add eax,1000000
invoke IsBadReadPtr, eax, 236992
PrintDec eax ;eax=0, читать можно
invoke VirtualFree, ebx, 1234567, MEM_DECOMMIT
Выделено 302 страницы по 4096. Весь диапазон проверяется одним вызовом IsBadReadPtr. Вся память в размере 1236992 байта (при запрошенных 1234567) доступна.
Номер ответа: 6
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #6
Добавлено: 25.11.05 01:18
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 25.11.05 12:02
Гы-гы. Спасибо за совет - пойду пробовать.