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

Ваш аккаунт

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

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

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

Проблема с различными виндами

1.5K
21 августа 2003 года
AndySPb
58 / / 11.04.2003
Проблема в том, что раньше я работал под 98, а сейчас переставил 2000. Прога по работе с com-портом прекрсно работала раньше, а теперь при попытке прочитать что либо из порта вылетает эксцепшн. Конкретно вот в этих строчках

if (!ReadFile(hCom, &c, 1, &numberOfBytesRead, NULL))
throw SerialPortException(portNumber, SerialPortException::ERROR_READ);

Может кто знает, что делать то? Повторяю, под 98 все работает.
401
21 августа 2003 года
Br@in RIPper
289 / / 15.02.2003
а порт-то правильно открывается? hCom!=NULL?

посмотри что возвращает 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);
1.5K
21 августа 2003 года
AndySPb
58 / / 11.04.2003
порт открывается правильно. Проверял. hCom!=NULL Да и под 98 работает же.
На твой код он сказал "Операция успешно завершена".
1.5K
21 августа 2003 года
AndySPb
58 / / 11.04.2003
Это в смысле на открытие порта "Операция успешно завершена". А на ReadFile "Параметр задан неверно"
401
21 августа 2003 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by AndySPb
Это в смысле на открытие порта "Операция успешно завершена". А на ReadFile "Параметр задан неверно"



проверь, чтобы порт открывался не overlapped. Больше ничего в голову не приходит. вообще напиши код открытия порта.

а насчет того, что все работает в Win98, так NT более строг в каких-то вопросах. Если что и прокатит на "авось" в 98, в NT может вызвать ошибку. Я через такое тоже проходил.

1.5K
21 августа 2003 года
AndySPb
58 / / 11.04.2003
код открытия порта
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? :)
401
21 августа 2003 года
Br@in RIPper
289 / / 15.02.2003
убери FILE_FLAG_OVERLAPPED!
код небось из примера какого-нить вытащил? :)
1.5K
21 августа 2003 года
AndySPb
58 / / 11.04.2003
да, помогло, спасибо огромное.
Вообще то сам писал, но год назад и прочитам всего одну статейку по программированию com-портов :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог