Листинг конечно интересный, но что с ним делать (какие следует из него делать выводы)? Помогли бы советом...

Вы говорите про многие заморочки. Нельзя ли огласить весь список? Ну типа:
1) Эта заморочка делает то и то.....
2) Эта заморочка делает то и то.....
....................
Что было понятно (мне пока) из вашего сообщения?
1) Таймауты надо делить! Возможно, и даже не трудно. Но разве это влияет на работоспособность элемента? Давайте разберемся с этим: я утверждаю что он работает, а Вы?
2) Вы хотите пооткрывать 255 портов? А кто Вам мешает! где дуля-то? Ставьте 255 элементов, в чем проблемы - не пойму пока. Или я что-то неправильно понимаю.....
3) А какие другие заморочки

IVAN:
А как вы себе представляете одновременную работу нескольких приложений с COM-портом? Вернее как и кто потом будет выяснять от какого приложения пришли данные и какому приложению отдавать обратно данные из COM-а. Если закрыть COM, то он действительно освобождается, и другие проги смогут с ним работать. Если такого же не могут сделать эти другие - то это же их проблема! Так же как с файлом: если я его открыл на чтение /запись, то либо у меня ничего не получится (файл занят другой прогой), либо у других будет закрыт доступ до тех пор, пока я его не закрою. При всей либеральности 98-й, она тоже не позволяет таких вольностей, даже если не через WinAPI, а программировать напрямую через порты.
Если вопрос только в том, что выдать сообщение "не могу открыть COM", то это нетрудно сделать. Только открыть его от этого не легче, все равно придется освобождать COM от других приложений.
Ну а свой пример я испытывал бесконечно просто - соединил между собой 2 и 3 контакты разъема. Что передавалось ('Hello!_' например несколько раз) - то и было успешно потом не приеме. И никаких других приложений, чтобы не пудрить себе мозги чужими проблемами (и своих хватало). А что COM не открывается (если например его заняла другая прога - что нетрудно) я видел по тому, что при передаче не проходило событие onWrite.
И все (дешево и сердито)
