Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемма при открытии СОМ порта посредством функции CreateFile


Страницы:   1 2

Rule ©   (2005-09-29 14:59:00) 

Вот такая вот аномали у меня происходит, все прекрастно работает, когда открывают СОМ-порт но прихожу утром на работу и картина зачастую бывает интересная ... теперь по порядку ...

во кусок кода, которым я открываю СОМ-порт, вернее инициализирую хэндл к нему:

procedure TCustomComPort.CreateHandle;
begin
 if FHandle = INVALID_HANDLE_VALUE then CloseHandle(FHandle);
 FHandle := CreateFile(
   PChar('\\.\' + FPort),
   GENERIC_READ or GENERIC_WRITE,
   0,
   nil,
   OPEN_EXISTING,
   FILE_FLAG_OVERLAPPED,
   0);

 if FHandle = INVALID_HANDLE_VALUE then
   raise EComPort.Create(CError_OpenFailed, GetLastError);
end;

дык вот под утро начинает кричать что "не могу открыть компорт, ошибка виндовз 5", причем перезагрузка не помогает, а когда беру вытыкаю свое терминальное устройство с компорта, вставляю туда штрихкод ридер, просто читаю любой штрихкод ридером, причем на компьютере не запуская ни одной программы, тоесть читать данные некому ...
вот после этого включаю опять свое терминальное устройство в компорт и хэндл без проблем создается и все работате ....

куда копать, где собака зарылась, подскажите пожалуйста, мож есть у кого мысли по этому поводу ...
всем спасибо за внимание....


Rule   (2005-09-30 09:23:00) [1]

GanibalLector ©   (30.09.05 2:59) [26]
Уважаемый,а зачем гадать??? Проверь утилитой PortMon от дяди М.Руссиновича.
а каким тамким чудесным образом эта утилита покажет кто захватил мой порт ???
ЗЫ: утилита действительно дельная :-))), именно ей всегда и пользовался, спасибо Руссиновичу :-)))

Никак!
очень печально в таком случае ...


GanibalLector   (2005-09-30 02:59:00) [2]

2 Rule ©
Уважаемый,а зачем гадать??? Проверь утилитой PortMon от дяди М.Руссиновича.

>вопрос щас в том что делать в таком случае, как получить доступ к порту "внаглую"

Никак!


Rule   (2005-09-29 20:24:00) [3]

umbra ©   (29.09.05 20:20) [23]
Это исключение генерит программа, если не может открыть порт. Оно случается? Если нет, то порт успешно открывается.


ну это я знаю, но оно генерится именно если инвалид хэндл, и выдет всегда номер ошибки 5, тоесть доступ закрыт, компорт кемто занят ... как было сказано выше ...
вопрос щас в том что делать в таком случае, как получить доступ к порту "внаглую"


Rule   (2005-09-29 20:23:00) [4]

кстати вот мысть пришла в голову, а если допустим мое приложение захватывает порт функицией CreateFile  потом неправильно закрывается и естественно не освобождает хэндл, он же продолжает висеть, правильно ???, вот интересно что в таком случае делать ...

в голову лезет только один вариант, хранить в реестре или в инифайе хэндл после открытия порта и стирать его после закрытия, тоесть если там значение есть, значит в прошлый раз программа плохо вышла и этот хэндл и есть хэндл порта ...

тем более что двух экземпляров приложения быть не может, так как это мультиинстанс СОМ-сервер ...

кто может чего сказать по этой мысли ...


umbra   (2005-09-29 20:20:00) [5]


> Rule ©   (29.09.05 20:15) [21]


Это исключение генерит программа, если не может открыть порт. Оно случается? Если нет, то порт успешно открывается.


umbra   (2005-09-29 20:16:00) [6]


> И чё это ваще за ошибка такая?


А ето я не в курсах. Гаварят далжна быть инагда


Rule   (2005-09-29 20:15:00) [7]

да не вообщето исключение EComPort я генерю сам, вернее автор копмонентов, вопрос в том что порт занят уже, но как он может быть занят если даже перезагрузка не понимает ...
во вторых пугает вот то что для других приложений он свободен ...


umbra   (2005-09-29 20:14:00) [8]

2 Fay ©   (29.09.05 20:11) [19]

см. пост 0


Fay   (2005-09-29 20:11:00) [9]

2 umbra ©   (29.09.05 18:30) [18]
>> Но ведь ошибки EComPort нет?
А в каком месте приведённого кода предполагается возникновение этой (EComPort) ошибки?
И чё это ваще за ошибка такая?


umbra   (2005-09-29 18:30:00) [10]

Но ведь ошибки EComPortнет? значит, он открывается. а ошибка виндоуз случается позже


Rule   (2005-09-29 18:06:00) [11]

simpson ©   (29.09.05 17:55) [16]

ну логически то пришли то к ответу ... что порт занят поэтому и генерит такую ошибку ...
вопрос в том как его освободить и вот анамалия с штрихкодридером и другими приложениями, им то пофиг ... почемуто порт занят только для меня


simpson   (2005-09-29 17:55:00) [12]

> только это врядли поможет

Как скажешь.

> я привел кусок кода гед возникает ошибка

Как раз данный кусок кода работает правильно. Можно получить доступ к порту - он  его открывает. Нельзя - генерит исключение. Где же здесь ошибка?

Ошибка у Вас, уважаемый, как всегда, в 17-й строке.


Rule   (2005-09-29 17:48:00) [13]

Kolan ©   (29.09.05 17:45) [14]
дык так и делаю, вот и пытаюсь его открыть поэтому такая вот ошибка и возникает


Kolan   (2005-09-29 17:45:00) [14]

А нельза просто открыть порт при старте программы и закрыть при еёзавершение.
ТЕ сидеть на нем постоянно?


Rule   (2005-09-29 17:07:00) [15]

wal ©   (29.09.05 15:59) [8]

хмм, интересно интересно ... а как жеж определить наверняка кто владее щас портом


Rule   (2005-09-29 17:07:00) [16]

simpson ©   (29.09.05 15:54) [7]
ЗЫ: Кстати, тут есть чудесный тэг для его (кода) оформления.

я пользуюсь клиентом от Питера, нечетабельно тут получается если им смотреть


Rule   (2005-09-29 17:06:00) [17]

simpson ©   (29.09.05 15:54) [7]
Плюс, не помещал бы код, помимо того, что ты привел здесь.

:-), да хоть весь проект ... только это врядли поможет, я привел кусок кода гед возникает ошибка ...


Rule   (2005-09-29 17:06:00) [18]

simpson ©   (29.09.05 15:54) [7]
Конечно, есть. Сначала нужно определить, какое приложение занимает этот порт. Вполне возможно, что и твое собственное.


кто может занимать порт после перезагрузки компьютера, мои приложения автоматом не стартуют


Rule   (2005-09-29 17:01:00) [19]

Во-вторых, ты бы задачу описал, что ли. Ну и способ ее решения, реализуемый в данный момент тобой.

значит задача до предела простая, есть терминальное устройство, оно работает по принципу послал запрос оплучил ответ ...

я пишу драйвер под него, вернее написал ...
есть компоненты для работы с СОМ-портом
ComPort Library
by Dejan Crnila and others, 1998 - 2003
See http://comport.sf.net/for more info

ну вот значит построи я свое приложени ена этой компоненте пару ошибок зафискил, все работает замечательно ...

но иногда, причем совершенно неожиданно происходит вышеописанная ситуация, причем интересный факт, что вот способ со сканером (просто он под рукой) помогает ...
у мнея возникли подозрения что это на уровне винды ... но почему другие приложения работающие с СОМ портом не ругаются

вышеуказанная процедура - это источник ошибки при попытке открыть порт этой библиотекой ...


wal   (2005-09-29 15:59:00) [20]


> а когда беру вытыкаю свое терминальное устройство с компорта,
> вставляю туда штрихкод ридер
А может твое терминальное устройство за ночь переводит линию приема в BREAK-состояние? Хотя вроде на открытие никак не должно влиять. Но если вдруг винде придет в голову принять твое устройство за модем, то  порт может TAPI занять. Или за мышь, тогда драйвер порт для себя заберет.

С уважением.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо