Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Настройка Com-порта


Автор: NiТR0 15.9.2005, 11:44
Ребята, проблема. Помогите, кто может.
Я вручную заполняю структуру DCB для настройки COM-порта, а SetCommState не выполняется и FormatMessage говорит что "Неверная ф-ия".
Синхронный режим, хэндл беру нормально, грешу на структуру DCB, но что в ней может быть не так? Спасайте, народ. smile
Код

BOOL WorkComm(int NumCommPort)
{
HANDLE HandleCommPortPrinter;
char strNumCommPort[5] = "";
DCB dcb;

ZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_57600;
dcb.fBinary = true;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
// Если XoffChar и XonChar равны, то SetCommState выдаёт ошибку:
// The SetCommState function fails if the XonChar member of the DCB structure is equal to the XoffChar member.
// Поэтому делаю так:
dcb.XoffChar = 0;
dcb.XonChar = 1;

sprintf(strNumCommPort, "COM%i", NumCommPort);
HandleCommPortPrinter = CreateFile(strNumCommPort, GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, 0, NULL);

SetCommState(HandleCommPortPrinter, &dcb);
...
Close(HandleCommPortPrinter);
return true;
}

Автор: takedo 15.9.2005, 13:53
после того как BOOL ret = SetCommState; if(!ret)GetLastError(&ErCode); и хотя бы посмотри чего не того.

Автор: NiТR0 15.9.2005, 15:17
Ура товарищи! Ответ найден!
Порт нельзя конфигурировать, если на нем стоит драйвер, т.е. он занят.
Ничего хорошего правда, но главное - до истины добрался!
Всем большое спасибо!
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)