Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2015, 15:26   #1
Sweety Bell
 
Регистрация: 17.07.2015
Сообщений: 7
По умолчанию Программа для Com-порта на WInAPi

Здравствуйте! Пишу программу для ком-порта. В программе есть 2 файла .cpp-main.cpp settings.cpp. В файле main.cpp происходит передача и прием данных с порта. В settings.cpp -настройка и подключение к порту.
Когда пытаюсь отправить файл, появляется ошибка "the handle is invalid". когда тестирую настройки с помощью дебаггера, появляется ошибка "Unable to configure the serial port". помогите, пожалуйста, разобраться что не так. Файлы программы-в архиве
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (8.3 Кб, 13 просмотров)
Sweety Bell вне форума Ответить с цитированием
Старый 06.08.2015, 20:50   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Для поиска COM портов лучше воспользоваться функцией QueryDosDevice.

Проверьте что содержит hPort в момент вызова ComPortSettings.
Проверьте что выдает GetLastError в после вызова SetCommState.
Проверьте правильно ли заполнен DCB. Можно вызвать GetCommState и сравнить результат с вашим.
waleri вне форума Ответить с цитированием
Старый 07.08.2015, 09:14   #3
Sweety Bell
 
Регистрация: 17.07.2015
Сообщений: 7
По умолчанию

В момент вызова ComPortSettings(), hPort содержит адрес 0x000000bc. GetLastError выдает ошибку 87: ERROR_INVALID_PARAMETER
Sweety Bell вне форума Ответить с цитированием
Старый 07.08.2015, 09:51   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну так попробуйте рядсом с SetCommState сделать GetCommState.
Либо у вас содержимое hPort не актуально, либо не правильно заполнен DCB.
waleri вне форума Ответить с цитированием
Старый 07.08.2015, 10:13   #5
Sweety Bell
 
Регистрация: 17.07.2015
Сообщений: 7
По умолчанию

Скорость, четность, стопбиты, количество бит должны вводиться пользователем через интерфейс
Sweety Bell вне форума Ответить с цитированием
Старый 07.08.2015, 11:20   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Это еще не значит, что DCB заполнен правильно.
Прочитайте DCB и меняйте поля одно за другим, чтобы понять где возникает ошибка.
waleri вне форума Ответить с цитированием
Старый 07.08.2015, 11:39   #7
Sweety Bell
 
Регистрация: 17.07.2015
Сообщений: 7
По умолчанию

я так и написала
Код:
bool ComPortSettings(void)
{
	DWORD err;
	int result;
	result=GetCommState(hPort,&MyDcb);

	
	
	
	MyDcb.ByteSize=dcbset.Bytesize;

	MyDcb.Parity=dcbset.ParityScheme;
	
	MyDcb.StopBits=dcbset.Stopbits;

	if (!SetCommState (hPort,&MyDcb))
    {
		err=GetLastError();
		MessageBox(0,"Unable to configure the serial port",0,MB_OK);
		return false;
	}
	else return true; 
}
Все поля заполняются GetCommState и только нужные пользователем. Но когда доходит GetCommState, выдаетсся ошибка 87:ERROR_INVALID_PARAMETER
Sweety Bell вне форума Ответить с цитированием
Старый 07.08.2015, 11:48   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Вот так работает?

Код:
bool ComPortSettings(void)
{
	memset(&MyDcb,0,sizeof(MyDcb));
	MyDcb.DCBlength = sizeof(DCB);
	if (!GetCommState (hPort,&MyDcb))
    {
		MessageBox(0,"Unable to configure the serial port",0,MB_OK);
		return false;
	}
	
    return true; 
}
waleri вне форума Ответить с цитированием
Старый 07.08.2015, 21:03   #9
Sweety Bell
 
Регистрация: 17.07.2015
Сообщений: 7
По умолчанию

также как и раньше
Sweety Bell вне форума Ответить с цитированием
Старый 07.08.2015, 21:42   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну тогда не знаю...
hPort вроде OK, иначе и SetCommTimeouts бы валился...
А что за СОМ порт? Настоящий RS-232 или какой-то девайс прикидывается СОМ портом?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сниффер COM-порта или программное создание виртуального COM-порта Oleg_Ponomaryov Общие вопросы C/C++ 4 12.06.2015 09:28
Программа для разделения порта на несколько DimOwl Софт 7 06.10.2014 17:31
Подвисает программа на Delphi, которая считывает данные с COM-порта(весы), строит график SonicBob Помощь студентам 19 07.09.2011 03:08
программа для снятия данных с LPT порта Joslen_bomon Софт 2 08.11.2009 19:27
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50