Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];

Вниз

Работа с COM-портом   Найти похожие ветки 

 
EsKor   (2002-01-11 05:48) [0]

Недавно на конференции появлялось утвержение, что получить дескриптор уже открытого порта не возможно с помощью API.
Тогда вопрос:
А как его все-таки его получить, если очень надо?
Спасибо за ответы!


 
gek   (2002-01-11 07:34) [1]

дескриптор получаешь когда порт открываешь


 
EsKor   (2002-01-11 08:45) [2]

>gek
Так в том-то и дело, что когда COM-порт уже открыт (занят), функция CreateFile(...) возвращает значение INVALID_HANDLE_VALUE = DWORD(-1), при этом функция GetLastError возвращает ошибку ERROR_ACCESS_DENIED = 5;
Согласно Help параметр dwCreationDistribution функции CreateFile(...) может иметь значение только OPEN_EXISTING:
"The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDistribution parameter must be OPEN_EXISTING, and the hTemplate parameter must be NULL."
М.б. есть еще какая функция/процедура открытия порта которую я никак увидеть не могу?


 
gek   (2002-01-11 09:54) [3]

Именно так и будет если снова порт пытаться открыть.
Он и говорит - ошибка доступа.
Я всегда порты открывал именно так
var
hNewCommFile: THandle;
begin
hNewCommFile := CreateFile(PChar("COM2"),GENERIC_READ+GENERIC_WRITE,
0, nil, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);


 
MegaVolt   (2002-01-11 09:55) [4]

ИМХО по идеологии СОМ порта нельзя чтобы к нему обращались две программы :( Следовательно и получить второй дескриптор нельзя :( Увы.


 
Fishbone   (2002-01-11 10:22) [5]

Это можно сделать через vxd, работающие на уровне ядра. Описывать сдесь это я не буду - дам животрепещущий пример - искать в <a href= http://www.sysinternals.com> http://www.sysinternals.com </a> программу portmon - она идет с исходниками, правда на с, но кому надо - тот разберется.


 
EsKor   (2002-01-11 10:31) [6]

Видимо я не совсем верно задаю вопрос.
Нужно не открыть уже открытый порт, захватить его, или работать параллельно с другой программой, а просто получить его дескриптор. Ну на самом деле не просто из любопытства, а, например с целью его принудительного закрытия. Может быть это и странная задача, но она есть и долго объснять зачем это нужно.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
7-22847
Херувим
2001-12-29 13:29
2002.04.08
Как определить номер железа


3-22573
kolonist
2002-03-17 12:03
2002.04.08
Как совладать с Index out of date или Index read only?


1-22716
~Alice~
2002-03-26 21:10
2002.04.08
RichEdit люди такой вопрос :


3-22579
polarbear
2002-03-17 20:46
2002.04.08
Как остановить сервер FireBird из командной строки под Win9x?


14-22837
Холостой
2002-03-01 07:11
2002.04.08
Как в сделать так, чтобы текст в StaticText был в несколько строчек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский