Проблема с различными виндами
if (!ReadFile(hCom, &c, 1, &numberOfBytesRead, NULL))
throw SerialPortException(portNumber, SerialPortException::ERROR_READ);
Может кто знает, что делать то? Повторяю, под 98 все работает.
посмотри что возвращает GetLastError.
я для этого использую такой код:
LPSTR lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,NULL);
MessageBox(0, lpMsgBuf, "Ошибка", MB_OK|MB_ICONERROR);
LocalFree(lpMsgBuf);
На твой код он сказал "Операция успешно завершена".
Это в смысле на открытие порта "Операция успешно завершена". А на ReadFile "Параметр задан неверно"
Цитата:
Originally posted by AndySPb
Это в смысле на открытие порта "Операция успешно завершена". А на ReadFile "Параметр задан неверно"
Это в смысле на открытие порта "Операция успешно завершена". А на ReadFile "Параметр задан неверно"
проверь, чтобы порт открывался не overlapped. Больше ничего в голову не приходит. вообще напиши код открытия порта.
а насчет того, что все работает в Win98, так NT более строг в каких-то вопросах. Если что и прокатит на "авось" в 98, в NT может вызвать ошибку. Я через такое тоже проходил.
hCom = CreateFile(portName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
if (hCom == INVALID_HANDLE_VALUE)
throw SerialPortException(portNumber, SerialPortException::CANNOT_OPEN);
DCB dcb;
if (GetCommState(hCom, &dcb) == 0)
throw SerialPortException(portNumber, SerialPortException::CANNOT_GET_DCB);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (SetCommState(hCom, &dcb) == 0)
throw SerialPortException(portNumber, SerialPortException::CANNOT_SET_DCB);
COMMTIMEOUTS commTimeouts;
commTimeouts.ReadIntervalTimeout = 0;
commTimeouts.ReadTotalTimeoutMultiplier = 0;
commTimeouts.ReadTotalTimeoutConstant = 500;
commTimeouts.WriteTotalTimeoutMultiplier = 100;
commTimeouts.WriteTotalTimeoutConstant = 1;
if (SetCommTimeouts(hCom,&commTimeouts) == 0)
throw SerialPortException(portNumber, SerialPortException::CANNOT_SET_TIMEOUTS);
а что такое overlapped? :)
код небось из примера какого-нить вытащил? :)
Вообще то сам писал, но год назад и прочитам всего одну статейку по программированию com-портов :)