Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 23.11.05 04:01
Если процесс имеет права чтения и записи src и dest - можно смело копировать
Надо еще проверить все другие страницы, которые входят в src и dest

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 23.11.05 12:00
Нет необходимости проверять все страницы по отдельности, параметр ucb не ограничен размером страницы. Пример:

    invoke  VirtualAlloc, NULL, 1234567, MEM_COMMIT, PAGE_READWRITE
    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-сайт: vt-dbnz.narod.ru
 Профиль | | #6
Добавлено: 25.11.05 01:18
Как на VB можно захэндлить ошибки апишных библиотек, чтобы они не приводили к сбою всего приложения?
Очень просто. Написать программу так, чтобы этих ошибок НЕБЫЛО. Вот и все. А что-либо другое может привести к плохим последствиям, которые сразу не проявятся, а искать такие ошибки очень-очень сложно.

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 25.11.05 12:02
Очень просто. Написать программу так, чтобы этих ошибок НЕБЫЛО

Гы-гы. Спасибо за совет - пойду пробовать.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам