![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемма при открытии СОМ порта посредством функции CreateFile
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", причем перезагрузка не помогает, а когда беру вытыкаю свое терминальное устройство с компорта, вставляю туда штрихкод ридер, просто читаю любой штрихкод ридером, причем на компьютере не запуская ни одной программы, тоесть читать данные некому ...
вот после этого включаю опять свое терминальное устройство в компорт и хэндл без проблем создается и все работате ....
куда копать, где собака зарылась, подскажите пожалуйста, мож есть у кого мысли по этому поводу ...
всем спасибо за внимание....
simpson (2005-09-29 15:54:00) [21]Конечно, есть. Сначала нужно определить, какое приложение занимает этот порт. Вполне возможно, что и твое собственное.
Во-вторых, ты бы задачу описал, что ли. Ну и способ ее решения, реализуемый в данный момент тобой.
Плюс, не помещал бы код, помимо того, что ты привел здесь.
ЗЫ: Кстати, тут есть чудесный тэг для его (кода) оформления.
Rule (2005-09-29 15:48:00) [22]simpson © (29.09.05 15:43) [5]
а что делать, если другого выхода нет, а если есть, то подскажи ...
simpson (2005-09-29 15:43:00) [23]> ка получить хэндл открытого СОМ порта, чтоб его зарубать
Очередная проктологическая операция на гландах?
Rule (2005-09-29 15:28:00) [24]тогда возникает логический вопрос, как освободить СОМ - порт ... нашел такое вот
передать Handle открытого порта дочернему процессу, для чего нужно его сдублировать (
DuplicateHandle
) и в
CreateProcess
указать нужные флаги - о наследовании хэндлов. Способ передачи произвольный - хоть через Shared Memory, хоть через командную строку.
но это ж не то чуть чуть ... ка получить хэндл открытого СОМ порта, чтоб его зарубать ???
Rule (2005-09-29 15:11:00) [25]Reindeer Moss Eater © (29.09.05 15:04) [1]
да и кстати перезагрузка не помогает, может там с правами безопасности чтото надо сделать или ещё с чем, я уже не знаю что делать
Rule (2005-09-29 15:09:00) [26]Reindeer Moss Eater © (29.09.05 15:04) [1]
да я понимаю, но если я беру допустим штрихкодридер и хипертерминал, то он работает ... чего для него не занят а для меня занят ...
и вот ситуация с перетыканием тоже вопрос ... я ж ничего е запуска, только в компорт посылаю чегото, и то на канальном уровне ....
Reindeer Moss Eater (2005-09-29 15:04:00) [27]5L ERROR_ACCESS_DENIED
Твой порт утром кем-то занят.