Работа с COM портом в Visual C++

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Yarik
Writer
Posts: 15
Joined: 07 Jul 2005 22:58
Location: Новосибирск

Работа с COM портом в Visual C++

Post by Yarik »

А не богат ли ктонить нормальной DLLкой для работы с COM портом.
CreateFile();ReadFile() что то не нравится.
Может есть анология inpout32.dll(LPT) для COMа?
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Ну, я всегда к своему проекту просто подключал модуль управления COM портом со своим потоком. Можешь один раз написать такой и скомпилить в DLL. :)
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А вот это не пойдет?

http://www.codeguru.com/Cpp/I-N/network ... .php/c5425
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
fk0
Novelist
Posts: 49
Joined: 10 Jan 2006 07:54
Location: St.Petersburg, Russian

Re: Работа с COM портом в Visual C++

Post by fk0 »

Yarik wrote:А не богат ли ктонить нормальной DLLкой для работы с COM портом.
Дайте кампанент!
CreateFile();ReadFile() что то не нравится.
Да мне вообще winapi не нравится. Но это -- достаточный, абсолютно и полностью, интерфейс.
Может есть анология inpout32.dll(LPT) для COMа?
Кто эту dll потом поддерживать будет? Всякую дрянь тащить -- чревато. Плюс копирайт.
lvd
Maniac
Posts: 230
Joined: 01 Mar 2005 21:42

Re: Работа с COM портом в Visual C++

Post by lvd »

Yarik wrote:Может есть анология inpout32.dll(LPT) для COMа?
А я вот чё-то не вкурю: inpout32.dll она же не для ЛПТ там или КОМа, а именно чтобы в ЛЮБОЙ порт залезть. Так кто мешает ею лазить в порты КОМа?
Du bist ein Spektrumist!
User avatar
Yarik
Writer
Posts: 15
Joined: 07 Jul 2005 22:58
Location: Новосибирск

Post by Yarik »

А я вот чё-то не вкурю: inpout32.dll она же не для ЛПТ там или КОМа, а именно чтобы в ЛЮБОЙ порт залезть. Так кто мешает ею лазить в порты КОМа?
Ага!Но с LPT проще байт отправил - байт принял.А с COM гемора больше.Dll ку я нашел,очень удобная там все нужные функции отправка байта,прием байта,прием-отправка массива.Вроде еще чтото но мне только эти были нужны.
Sonic
Senior
Posts: 112
Joined: 09 Jun 2005 05:34

Post by Sonic »

Ты че, изверг, напрямую в железо лезешь из своей программы только с целью работать с последовательным портом?
Да тебя расшесть за такое надо! :) А ты в курсе, что в современных машинах нет уже ни LPT, ни COM? А скажи-ка мне дорогой товарисч, а что будет если я твою программу запущу на машине, где у меня железка через USB-конвертор подключена? На макинтоше например?
Это сейчас оно пока еще экзотика, а года через два оно будет повсеместно.
И ваще набор возможных базовых адресов в настоящее время не ограничен 0x3F8, 0x2F8, 0x3E8, 0x2E8? Ты в курсе что последовательных портов может быть хоть 20 штук? И кстати не все из них аппаратно совместимы с 16550.
lvd
Maniac
Posts: 230
Joined: 01 Mar 2005 21:42

Post by lvd »

Sonic wrote:Ты че, изверг, напрямую в железо лезешь из своей программы только с целью работать с последовательным портом?
Да тебя расшесть за такое надо! :) А ты в курсе, что в современных машинах нет уже ни LPT, ни COM? А скажи-ка мне дорогой товарисч, а что будет если я твою программу запущу на машине, где у меня железка через USB-конвертор подключена? На макинтоше например?
Это сейчас оно пока еще экзотика, а года через два оно будет повсеместно.
И ваще набор возможных базовых адресов в настоящее время не ограничен 0x3F8, 0x2F8, 0x3E8, 0x2E8? Ты в курсе что последовательных портов может быть хоть 20 штук? И кстати не все из них аппаратно совместимы с 16550.
А мне - плевать!
У меня на ноуте и ком и лпт есть, и через лпт замечательно байтбластер работает. Равно как и другие колхозные девайсы (inpout32.dll). А что у кого-то чего-то нет или вообще мак - это его проблемы, нечего было шыт покупать.
Du bist ein Spektrumist!
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

LVD, для прямого доступа к железу нужно делать мьютекс (сам не юзаю, слышал о них от программеров) или делать свой драйвер. По мне - проще поставить UserPort и оформить подпрограмму обращения к портам как StdCall (в Delphi). Все работает на ура. Далее, есть книга у меня, там описаны примеры работы с СОМ портами, может поможет (там все для Delphi, но вдруг по аналогии навеет тебе решение)?
http://rapidshare.com/files/17405381/Com.rar.html (5,1Мб)
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Post by Romanich »

поставьте себе WinIO.dll и не парьтесь.
И шепчитесь с регистрами портов как хотите!
очень удобно и никакая ось не возбухает! :wink:
User avatar
fk0
Novelist
Posts: 49
Joined: 10 Jan 2006 07:54
Location: St.Petersburg, Russian

Re: Работа с COM портом в Visual C++

Post by fk0 »

lvd wrote:
Yarik wrote:Может есть анология inpout32.dll(LPT) для COMа?
А я вот чё-то не вкурю: inpout32.dll она же не для ЛПТ там или КОМа, а именно чтобы в ЛЮБОЙ порт залезть. Так кто мешает ею лазить в порты КОМа?
А догадайся:

1. Передерёшься с драйвером в системе;

2. Портов ты не знаешь;

3. Портов там вообще нет (USB) или порты не типовые... (MOXA какая -нибудь);

4. Отдельная проблема -- никакой реалтайм (а тебе нужно это в 50% подобных случаев) не обещается (лучшем случае квантами по 10мс).

Впрочем тебе никто не мешает... Но сказать, что это пер-анально -- ничего не сказать.
Меж тем использовать (для COM!) стандартные интерефейсы ОС, а сам COM-порт по назначению (т.е. для передачи БАЙТОВОГО потока -- чтоб работало если даже в разрыв пару модемов включить) -- никто не мешает...
--
[ZX]
User avatar
fk0
Novelist
Posts: 49
Joined: 10 Jan 2006 07:54
Location: St.Petersburg, Russian

Post by fk0 »

Romanich wrote:поставьте себе WinIO.dll и не парьтесь.
И шепчитесь с регистрами портов как хотите!
очень удобно и никакая ось не возбухает! :wink:
Ага. Только порт ввода-вывода МИКРОПРОЦЕССОРА к коммуникационному порту никакого отношения не имеет. Не очевидно разве? Вон в маках небось (не те, что на x86) вообще портов нет. В них вообще смысла не много...
--
[ZX]
lvd
Maniac
Posts: 230
Joined: 01 Mar 2005 21:42

Post by lvd »

HardWareMan wrote:LVD, для прямого доступа к железу нужно делать мьютекс (сам не юзаю, слышал о них от программеров)
А как? Вот в амигаос для того есть штатные средства, после которых руками в порты лазить можно. А в венде?
или делать свой драйвер.
Зачем, если инпоут32.длл - работает?
Du bist ein Spektrumist!
lvd
Maniac
Posts: 230
Joined: 01 Mar 2005 21:42

Re: Работа с COM портом в Visual C++

Post by lvd »

fk0 wrote:
lvd wrote:А я вот чё-то не вкурю: inpout32.dll она же не для ЛПТ там или КОМа, а именно чтобы в ЛЮБОЙ порт залезть. Так кто мешает ею лазить в порты КОМа?
А догадайся:

1. Передерёшься с драйвером в системе;
2. Портов ты не знаешь;
3. Портов там вообще нет (USB) или порты не типовые... (MOXA какая -нибудь);
4. Отдельная проблема -- никакой реалтайм (а тебе нужно это в 50% подобных случаев) не обещается (лучшем случае квантами по 10мс).
А не буду. Это вон аффтару "ReadFile чо-то не нравится", не мне. Мне вообще терминалок хватало, чтобы со всеми колхозными девайсами по кому общаться.
Du bist ein Spektrumist!
lvd
Maniac
Posts: 230
Joined: 01 Mar 2005 21:42

Post by lvd »

fk0 wrote:Ага. Только порт ввода-вывода МИКРОПРОЦЕССОРА к коммуникационному порту никакого отношения не имеет. Не очевидно разве? Вон в маках небось (не те, что на x86) вообще портов нет. В них вообще смысла не много...
Порты (как средства связи с миром, а не как нечто, куда байтики пихать аутами) есть. Но в адресном пространстве общем болтаются просто. А на пц - в не общем, в отдельном. Тяжёлое насление 8-битных 8086, что уж поделать. Неизлечимо...
Du bist ein Spektrumist!