Как в Windows работать с com портом?
От: juvf  
Дата: 02.06.10 11:44
Оценка:
Пытаюсь с помощью WIN API

HANDLE port;
   port = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);
   if(port == INVALID_HANDLE_VALUE)
   {
      senMessage("Не возможно открыть последовательный порт", INBOX);
   }
   else
   {
           senMessage("Ком порт открылся", INSTATUSBAR);
           CloseHandle(port);
   }


В компе имеется
Com1 — встроенный в материнку сомпорт
Com5, Com6 — два порта на мультеплате
Com14, Com15 — два порта на USR<->RS232 преобразователе.

Если пытаюсь создать port Com5 или Com6 — то всё нормально создается. А при попытке создать port 1-ый, 14-ый или 15-ый, то port == INVALID_HANDLE_VALUE. Порты все рабочие, проверял гипертерминалом и другими программами.
В чем может быть поблемма?


ps Есть какой-нибудь класс для работы с последовательным портом в C++ Builder-e?

02.06.10 16:52: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Как в Windows работать с com портом?
От: Vlad_SP  
Дата: 02.06.10 11:48
Оценка:
Здравствуйте, juvf,

"\\\\.\\COM1"
Re[2]: Как в Windows работать с com портом?
От: juvf  
Дата: 02.06.10 11:57
Оценка: :)
Здравствуйте, Vlad_SP, Вы писали:

V_S>Здравствуйте, juvf,


V_S>"\\\\.\\COM1"


Не помогает. "\\\\.\\COM5" или "\\\\.\\COM6" — работает, а "\\\\.\\COM1" или "\\\\.\\COM14" — нет
Re: Как в Windows работать с com портом?
От: slava_phirsov Россия  
Дата: 02.06.10 12:28
Оценка:
Здравствуйте, juvf, Вы писали:

J>Пытаюсь с помощью WIN API


J>
HANDLE port;
J>   port = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);
J>   if(port == INVALID_HANDLE_VALUE)
J>   {
J>      senMessage("Не возможно открыть последовательный порт", INBOX);
J>   }
J>   else
J>   {
J>           senMessage("Ком порт открылся", INSTATUSBAR);
J>           CloseHandle(port);
J>   }
J>


Работал с портом (правда, это было достаточно давно), но не припоминаю, чтобы ставил флаги OPEN_EXISTING и атрибуты. Версия Винды-то какая? 98/XP/Vista ?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re: Как в Windows работать с com портом?
От: ak_miass Россия  
Дата: 02.06.10 12:56
Оценка:
Работал с ком-портами но уже давненько (кстати как раз из дебилдера). Сходу ничего криминального в твоем коде не вижу.
1. Что возвращает GetLastError?
2. Может эти порты уже кто-то другой открыл?
3. Offtop. Overlaped сильно нужен? Просто без него на порядок проще.
Re: Как в Windows работать с com портом?
От: vasvladal  
Дата: 02.06.10 14:38
Оценка:
Здравствуйте, juvf, Вы писали:

J>Пытаюсь с помощью WIN API


J>
HANDLE port;
J>   port = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);
J>   if(port == INVALID_HANDLE_VALUE)
J>   {
J>      senMessage("Не возможно открыть последовательный порт", INBOX);
J>   }
J>   else
J>   {
J>           senMessage("Ком порт открылся", INSTATUSBAR);
J>           CloseHandle(port);
J>   }
J>


J>В компе имеется

J>Com1 — встроенный в материнку сомпорт
J>Com5, Com6 — два порта на мультеплате
J>Com14, Com15 — два порта на USR<->RS232 преобразователе.

J>Если пытаюсь создать port Com5 или Com6 — то всё нормально создается. А при попытке создать port 1-ый, 14-ый или 15-ый, то port == INVALID_HANDLE_VALUE. Порты все рабочие, проверял гипертерминалом и другими программами.

J>В чем может быть поблемма?


J>ps Есть какой-нибудь класс для работы с последовательным портом в C++ Builder-e?


Так все должно работать.
HANDLE port = CreateFile(_T("\\\\.\\COM1"),    // 
            GENERIC_READ | GENERIC_WRITE,    // 
            0,                // 
            NULL,            // 
            OPEN_EXISTING,    // 
            0,                // 
            NULL);            //


Если нет — через HyperTherminal попробовать его открыть и, вообще, посмотреть через Диспетчер устройств, есть ли он в наличии и в каком состоянии
Re: Как в Windows работать с com портом?
От: Аноним  
Дата: 03.06.10 03:20
Оценка:
С утра все заработало. в чем была проблема

А кроме win api,,,,,, как еще пожно работать с компортом в Windows XP?
Re[2]: Как в Windows работать с com портом?
От: ak_miass Россия  
Дата: 04.06.10 08:59
Оценка:
Здравствуйте, Аноним, Вы писали:
А>А кроме win api,,,,,, как еще пожно работать с компортом в Windows XP?
В XP (точнее в NT) никак. Можно через готовые компоненты, но они внутри все равно WinAPI дергают.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.