![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ComPort'ы [D6, D7, XP]
Askorbinka © (2010-10-10 22:15:00)Здравствуйте, почтенные. Помогите начинающему решить проблему обработки ошибок в компоненте ComPort Library (CPort). Суть проблемы такова: Есть устройство, которое занимет определенные порты СОМ30 и СОМ31. При подключении этого устройства создается на некоторое время еще и СОМ29. Так-же присутствует физический СОМ1, к которому естественно ничего не подключено. Т.к. устройство ищется с помощью поочередного окрытия портов и посылки нужной команды, то во время открытия СОМ1 вылазит ошибка. Вот тут и кроется бяка. Эту ошибку надо обработать так, чтобы программа не останавливалась, а тихо мирно перешла к проверке следующих портов на предмет наличия устройства, чтобы найти его и навсегда запечатлеть в памяти программы. Ошибка - ошибка открытия COMPort'a, да и все остальные (там в хелпе есть список). Устройство - мегафон-модем. API - не предлагать. Заранее - огромное человеческое спасибо.
Германн (2010-10-19 01:41:00) [1]
> Askorbinka © (18.10.10 23:18) [8]
>
> Всем спасибо за участие. Разобрался. Работаю через реестр.
> Нахожу ViD&PiD устройства, а там уже порт прописан. 100%
> попадание. Еще раз всем спасибо.
>
Лучше бы и не отвечал. А то совсем запутал ситуацию.
:)
Askorbinka (2010-10-18 23:18:00) [2]Всем спасибо за участие. Разобрался. Работаю через реестр. Нахожу ViD&PiD устройства, а там уже порт прописан. 100% попадание. Еще раз всем спасибо.
Плохиш (2010-10-13 23:17:00) [3]
> Askorbinka © (13.10.10 20:18) [5]
{$i-}
Palladin (2010-10-13 20:58:00) [4]
> Если пускать программу не из под делфи, то код ошибки разный.
> Если из под делфи - то wincode:2, а если просто ехешником
> - то wincode:6
и что из них что?
Askorbinka (2010-10-13 20:18:00) [5]2 Германн. Вот как-то так:
for i := 1 to 56 do
try
COMPORT1.PORT:='COM'+IntToStr(i); // Попытка открытия порта
COMPORT1.OPEN; // Тут вылазит ошибка, если COM порта физически нету.
except
// on E: ... do // Ошибка открытия порта из хелпа
begin
... // А до этого места вообще не доходит.
end
end;
2 Плохиш. Если пускать программу не из под делфи, то код ошибки разный. Если из под делфи - то wincode:2, а если просто ехешником - то wincode:6
Плохиш (2010-10-11 22:09:00) [6]
> Askorbinka © (11.10.10 21:30) [2]
>
> Неполучается так обрабатывать. :(. Данный код верен если
> присутствует порт, а вот если его нет, и пытаешься его открыть
> - вылазит ошибка.
Запусти программу не из делфи.
Германн (2010-10-11 21:53:00) [7]
> Данный код верен если
Данный код верен всегда.
Askorbinka (2010-10-11 21:30:00) [8]Неполучается так обрабатывать. :(. Данный код верен если присутствует порт, а вот если его нет, и пытаешься его открыть - вылазит ошибка.
В свете дальнейшего ковыряния компоненты была обнаружена функция EnumComPorts, которая чудным образом выдергивает список СОМ портов, задействованных в системе, ну и засовывает их в ComboBox (так в примере было), поэтому перебирать порты уже смысла не имеет. НО!!! При попытке записать чего-то в СОМ1 (который естественно первый в списке) вылазит ошибка. Которую хотелось бы обработать, чтобы оная не вылазила на экран, а тихо мирно в недрах программы похоронилась, доказав основному коду, что не имеет смысла дальше работать с этим портом...
Юрий Зотов (2010-10-10 23:51:00) [9]> устройство ищется с помощью поочередного окрытия портов
Возможно, try-except?
for i := ... to ... do
try
... // Попытка открытия порта
except
// on E: ... do // Ошибка открытия порта из хелпа
begin
... // Обработка ошибки
end
end;