![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую, господа!
У меня вопрос: как мне правильно вызвать исключение а потом отловить его? Я пробовал так: если пароль занесли неправильный, я вызываю исключение ошибки деления на нуль (11) и пытаюсь его отловить. Но программа не ловит его а показывает ошибку (как в Дельфи "Access violation error at address ...") Я начал программировать на VB 2 дня назад, так что не обезсудьте. ![]() Function OpenFromFile(ByVal FileName As String) As Boolean Dim Stream As StreamReader Dim FStream As FileStream Dim Idx As Integer Dim Result As Boolean = True Dim PasswordDialog As PasswordForm Try FStream = New FileStream(FileName, FileMode.Open, FileAccess.Read) Stream = New StreamReader(FStream) Password = Decrypt(Stream.ReadLine) PasswordDialog = New PasswordForm() PasswordDialog.Password = Password If PasswordDialog.ShowDialog(Me) = DialogResult.No Then Error 11 'Здесь вызываю исключение End If QwestionCount = Stream.ReadLine() ReDim Preserve Qwestions(QwestionCount) For Idx = 0 To QwestionCount - 1 With Qwestions(Idx) .sQwestion = Stream.ReadLine() .sAnswer1 = Stream.ReadLine() .sAnswer2 = Stream.ReadLine() .sAnswer3 = Stream.ReadLine() .sAnswer4 = Stream.ReadLine() .RightAnswer = Val(Stream.ReadLine()) End With Next Idx GotoQwestion(0) QwUpDown.Maximum = QwestionCount Catch eIO As Exception MsgBox("Error reading file: " & eIO.ToString, MsgBoxStyle.Critical, "IO ERROR") Result = False Catch eFile As Exception MsgBox("Error open file: " & eFile.ToString, MsgBoxStyle.Critical, "FILE ERROR") Result = False Catch e As DivideByZeroException 'Здесь я ловлю MsgBox("Access denied! Incorrect password!", MsgBoxStyle.Critical, "Access not allowed") Result = False Finally Stream.Close() FStream.Close() End Try Return Result End Function -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Grey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
В VB совсем другая идеалогия обработки ошибок
Function OpenFromFile(ByVal FileName As String) As Boolean Dim Stream As StreamReader Dim FStream As FileStream Dim Idx As Integer Dim Result As Boolean = True Dim PasswordDialog As PasswordForm Dim bCleanup ' - флаг который показывает освобождались ли ресурсы 'Try - вместо этого: On Error GoTo Failed FStream = New FileStream(FileName, FileMode.Open, FileAccess.Read) Stream = New StreamReader(FStream) Password = Decrypt(Stream.ReadLine) PasswordDialog = New PasswordForm() PasswordDialog.Password = Password If PasswordDialog.ShowDialog(Me) = DialogResult.No Then Error 11 'Здесь вызываю исключение End If QwestionCount = Stream.ReadLine() ReDim Preserve Qwestions(QwestionCount) For Idx = 0 To QwestionCount - 1 With Qwestions(Idx) .sQwestion = Stream.ReadLine() .sAnswer1 = Stream.ReadLine() .sAnswer2 = Stream.ReadLine() .sAnswer3 = Stream.ReadLine() .sAnswer4 = Stream.ReadLine() .RightAnswer = Val(Stream.ReadLine()) End With Next Idx GotoQwestion(0) QwUpDown.Maximum = QwestionCount OpenFromFile = Result 'так возвращается результат работы функции Cleanup: ' - метка для освобождения ресурсов bCleanup = True Stream.Close() FStream.Close() if Err.Number <> 0 then GoTo Failed ' - если произошла ошибка exit function Failed: ' - метка обработчика ошибок здесь можно определить тип ' ошибки и обработать ее if bCleanup = false then goto Cleanup 'сначала освободим ресурсы 'здесь можно по номеру ошибки Err.Number соответствующим образом 'ее обработать OpenFromFile = False 'типа все плохо End Function Код я не компилировал, так что могут быть опечатки. В общем разберешься ![]() |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Спасибо. Дома поразбираюсь. А я как обрадовался, когда увидел в хелпе знакомый блок try...finally. А не, тут оказывается не так как в Delphi.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Тогда вопрос по теме: а зачем реализовывать два пути для отловки исключений в одном языке?
P.S. Я все пишу на VB.NET -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Grey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Сразу не догадался что речь про VB.NET
![]() То что я написал касается VB6 в VB.NET оставили скорее всего чтоб упростить перенос кода с VB6. На VB.NET я не писал, писал только на C#. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |