Escho pro COM port
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??
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 - ов которые любит выдавать глупый мелкомягкий виндовс.
Советую написать свой драйвер отдельно для 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:)
У меня та же проблема, только работает под 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.
pinquin, смотри какую ссылку я нашел:
http://slydiman.narod.ru/rus/comm/index.htm
Spasibo SLA!