Tuborg
Команда клуба
Offline
|
|
« : 19-02-2008 09:53 » |
|
При открывании ком-порта пытаюсь отловить его доступность при помощи try... catch Если требуемый ком-порт отсутствует, то хочу появления сообщения типа "Порт № не может быть открыт" Но вместо этого мне всегда вываливается сообщение: "не достаточно системных ресурсов" В чём глюк? CString sPort; sPort.Format(_T("\\\\.\\COM%d"), nPort); try { m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, bOverlapped ? FILE_FLAG_OVERLAPPED : 0, NULL); } catch (char *err_str){ CString str; str.Format(_T("Порт %d не может быть открыт: %s"), nPort, err_str); ::AfxMessageBox(str); }
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 19-02-2008 10:05 » |
|
и не получится, катч тут ни при чём. Надо проверять валидность вернутого хендла m_hComm - != 0 и !=(HANDLE)-1
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 19-02-2008 10:08 » |
|
а насчёт недостаточности системных ресов - это что то другое, например бесконечный цикл, создающий какой то объект винды
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 19-02-2008 10:44 » |
|
Ещё лучше проверять if (hFile == INVALID_HANDLE_VALUE)
Tuborg, а в самом деле откуда идея "try-catch" использовать, да ещё с catch (char *err_str)?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 19-02-2008 10:47 » |
|
Джон, ну, я и мимею в виду INVALID_HANDLE_VALUE (==-1) , только никогда не могу запомнить, что какая функция возвращает - 0 или -1, поэтому проверяю оба значения ))
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 19-02-2008 13:49 » |
|
Лёш, поэтому (аки по ещё ряду причин) лучше пользоваться константами.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Aveic
Постоялец
Offline
Пол:
Yellow
|
|
« Ответ #6 : 19-02-2008 15:11 » |
|
Tuborg, а в самом деле откуда идея "try-catch" использовать, да ещё с catch (char *err_str)?
Мне тоже интересно, что может сподвигнуть на такое?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 19-02-2008 15:17 » |
|
Джон, так ведь я про что говорю - иногда это действительно INVALID_HANDLE_VALUE , а иногда 0 , примеры не вспомню
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 19-02-2008 15:18 » |
|
Aveic, да ничего фантастического - человек первый раз пользуется функцией и не знает свойств, вот и подумал, что функция , возможно, исключения выбрасывает. Ничего криминального )
|
|
|
Записан
|
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #10 : 20-02-2008 01:42 » |
|
Tuborg, если даже API функция и вызывает исключение ( например HeapCreate), то не исключения C++ (try catch), а SEH (__try __except). Если можно, покажи, где в MSDN есть такой пример. Может я ошибаюсь, но CreateFile не вызывает исключений, во всяком случае документированных.
|
|
« Последнее редактирование: 20-02-2008 01:47 от sss »
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 20-02-2008 04:21 » |
|
а покажи цитату из мсдн
|
|
|
Записан
|
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 20-02-2008 10:29 » |
|
а теперь покажи реализацию MyFunc();
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 20-02-2008 11:09 » |
|
ну так не видно же, что происходит в функции - кто там кидает эксепшен
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #17 : 20-02-2008 11:54 » |
|
Воистину, тип генерируемого исключения определяется тем, кто его генерит. Совершенно не обязательно это строка - некоторые рекомендуют, например, от std::exception все типы генерируемых исключений наследовать.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #18 : 20-02-2008 12:20 » |
|
Tuborg, тебе спрашивают не почему ты массив символов ловишь, а почему ты его ловишь при вызове CreateFile? Обычно инфа стоит в MSDN. Например для объекта CInternetSession в MSDN стоит If no Internet connection can be opened, CInternetSession throws an AfxThrowInternetException. Отсюда я знаю, что должет ловить catch(AfxThrowInternetException ex) А вот с чего ты решил ловить char *str при вызове CreateFile? ps Если ты знаешь что исключение вызывается, но не знаешь его тип. Попробуй сначала отловить все исключения catch(...)
|
|
« Последнее редактирование: 20-02-2008 12:35 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|
|