Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Escho pro COM port

2.8K
06 декабря 2003 года
pinquin
26 / / 01.11.2003
Est takaja problemka - upravlenie priborom cherez COM port. Proga dolzna rabotat na vsex Windax (esli eto vozmozno). Na Win98 true, na 2000 i XP false.
koe chto peredelal i stalo Win98=XP=true; No problemka ostalos. Naa Win98 vsio mozno sdelat Sleep(x), a na XP tolko Event. Problema v tom, chto funkcija WaitCommEvent(...) priema zdet bez konca, i proga "zavisaet". Luche ispolzovat funkciju WaitForSingleObject(hobject,dvtimeout). Togda nado postavit CreateFile(...FILE_FLAG_OVERLAPPED,NULL); i ReadFile(....,&overlap) WriteFile(....,&overlap);
No, kogda ja eto vstavliaju funkcii ReadFile(..) i WriteFile(..) vozvraschajut FALSE!!! Pochemu??
487
07 декабря 2003 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by pinquin
Est takaja problemka - upravlenie priborom cherez COM port. Proga dolzna rabotat na vsex Windax (esli eto vozmozno). Na Win98 true, na 2000 i XP false.
koe chto peredelal i stalo Win98=XP=true; No problemka ostalos. Naa Win98 vsio mozno sdelat Sleep(x), a na XP tolko Event. Problema v tom, chto funkcija WaitCommEvent(...) priema zdet bez konca, i proga "zavisaet". Luche ispolzovat funkciju WaitForSingleObject(hobject,dvtimeout). Togda nado postavit CreateFile(...FILE_FLAG_OVERLAPPED,NULL); i ReadFile(....,&overlap) WriteFile(....,&overlap);
No, kogda ja eto vstavliaju funkcii ReadFile(..) i WriteFile(..) vozvraschajut FALSE!!! Pochemu??



Советую написать свой драйвер отдельно для 9x отдельно для NT систем и юзать его в свое удовольствие.
ReadFile, WriteFile - бяка это все...
__asm
{
in
out
}
был есть и будет есть без всяких там true или false - ов которые любит выдавать глупый мелкомягкий виндовс.

2.8K
07 декабря 2003 года
pinquin
26 / / 01.11.2003
Цитата:
Originally posted by ddnh_bc


Советую написать свой драйвер отдельно для 9x отдельно для NT систем и юзать его в свое удовольствие.
ReadFile, WriteFile - бяка это все...
__asm
{
in
out
}
был есть и будет есть без всяких там true или false - ов которые любит выдавать глупый мелкомягкий виндовс.



Ne sovsem xochu soglasitsia. Kogda-to pisal na ASM draiver dlia LPT porta. Toze vsio rabotalo na Win9x, a XP tolko "rugalsia":) Tem bolee dlia COM porta vsio gorazdo sloznee. I otdelnie progi delat toze ne ochen korrektno pered zakazchikom. Naverno ostanus s API funkcijami, Tolko vot izbavitsia ot zavisanija:)

1.5K
08 декабря 2003 года
AndySPb
58 / / 11.04.2003
У меня та же проблема, только работает под 98 и 2000, а под XP вообще Violation вылетает. А ты как com порт юзаешь?
2.8K
08 декабря 2003 года
pinquin
26 / / 01.11.2003
Цитата:
Originally posted by AndySPb
У меня та же проблема, только работает под 98 и 2000, а под XP вообще Violation вылетает. А ты как com порт юзаешь?


Uze razobralsia - sam nepodumal, chto tak i dolzno bit, poka nenastupilo sobitie:))
Na XP esco neuspel proverit.
No za to pojavilis novie chudesa. Xotia vsio normalno peredaetsia i prinimaetsia, chislo priniatix ili peredanix baitov vsegda = 0 !!! Mozno bez etovo oboitis, no prosto interesno pochemu?
Vot kod:
//------------------------------------------------------------------------------
unsigned short Commport::Read(BYTE *buffer, unsigned short numbytes)
{
DWORD temp;

ClearCommError(port, &temp, &ComState);
SetCommMask(port,EV_RXCHAR);

ReadFile(port,buffer, numbytes, &temp, &Overlap);

if (GetLastError() != ERROR_IO_PENDING) return 102; // operacija nestartovala
if (WaitForSingleObject(Overlap.hEvent,500) == WAIT_OBJECT_0)
{
GetOverlappedResult(port,&Overlap,&temp,FALSE);
return temp; // dolzno bit chislo priniatix baitov
}
return 103; // nichevo nepriniato
}
//------------------------------------------------------------------------------
unsigned short Commport::Write(BYTE *buffer, unsigned short numbytes)
{
DWORD temp;

ClearCommError(port, &temp, &ComState);
SetCommMask(port,EV_TXEMPTY);

WriteFile(port, buffer, numbytes, &temp, &Overlap);

if (GetLastError() != ERROR_IO_PENDING) return 202; // operacija nestartovala if (WaitForSingleObject(Overlap.hEvent,500) == WAIT_OBJECT_0)
{
GetOverlappedResult(port,&Overlap,&temp,FALSE);
return temp; // dolzno bit chislo peredanix baitov
}
return 203; // nichevo neperedano
}
//------------------------------------------------------------------------------
I escho v peremennoi buffer naxoditsia info prediduschevo priema (novaja nakladivaetsia po verx staroi), xotia pered kazdoi operaciei priema ochischaju buffer i delaju PurgeComm(...); Kak izbavitsia?
Na 2000 toze neproverial. Kogda proveriu na vsex soobschu, no poka eti malenkie problemki.

415
09 декабря 2003 года
SLA
274 / / 08.08.2003
pinquin, смотри какую ссылку я нашел:
http://slydiman.narod.ru/rus/comm/index.htm
2.8K
10 декабря 2003 года
pinquin
26 / / 01.11.2003
Цитата:
Originally posted by SLA
pinquin, смотри какую ссылку я нашел:
http://slydiman.narod.ru/rus/comm/index.htm


Spasibo SLA!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог