Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dark2013
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 7
#1

Перечисление Com портов - C++

02.02.2013, 13:48. Просмотров 984. Ответов 6
Метки нет (Все метки)

В общем есть такая задачка, есть девайс, который передают данные по блютузу....в комп через USB воткнут приемник, который работает с компом через виртуальный ком порт....

Для работы использовал QExtSerialPort....все работает все замечательно...

Но если приемник выдернуть и потом воткнуть то порт как был открытым так и останется но работать уже не будет....вероятно сам объект порта уничтожается.... надо проверить....

В общем суть вопроса - каким образом можно отследить в системе появление и новых устройств(портов)... как добраться до перечислений доступных последовательных портов???....скорее всего получится платформозависимая штука, поэтому интересует под винду....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 13:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перечисление Com портов (C++):

Перечисление в BC++ - C++
В русском языке как, правило после букв Ж, Ч, Ш, Щ, пишется И, А, У, а не Ы, Я, Ю, (за исключением слов ЖЮРИ, БРОШЮРА, ПАРАШЮТ). Проверить...

перечисление месяцев - C++
написать консольную программу на С++, которая использует перечисление для идентификации месяцев года значениями номеров месяца от 1 до 12....

Enum Перечисление - C++
Есть номиналы монет, которые занесены в 2 перечисления (enum): рубли и монеты. Набрать определенную сумму минимальным количеством монет. ...

Перечисление enum - C++
Здравствуйте. Хотелось бы узнать, возможно ли "пройтись" по всем значениям перечисления, увеличивая переменную этого перечисления? Вот...

Перечисление чисел - C++
Здравствуйте! Я не являюсь программистом, но в моём деле мне необходима помощь компьютера. И ради этого я начал изучать программирование. Я...

Не работает перечисление - C++
Сам код: #include <iostream> #include <string> using namespace std; #include <windows.h> #include <process.h> enum typ...

6
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
02.02.2013, 14:38 #2
я вижу смысл только пытаться открыть порт заново.

или работать с реальным USB устройством (а не эмулирующим СОМ порт как некоторые микросхемы FTDI)
Ведь сам по себе СОМ порт не должен поддерживать Plug'n'Play по идее. Разве нет?
0
Dark2013
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 7
02.02.2013, 14:58  [ТС] #3
нельзя открыть новый порт....он его и не закрывает))..т.е я после выдергивания проверяю отикрыт ли ком порт - он пишет да открыт))....а если пытаюсь закрыть (после того как выдернул устройство) то прога зависает....скорее всего в реализации qextserialport блокируется какой то поток....я реализацию не смотрел.......

вопрос в том что я знаю что стопроцентов можно получить список доступных портов, я видел прогу в которой чел так делает....))....может есть WINAPI ная какая то функция или структура которая хранит в себе состояние.....тогда я по таймеру мог бы делать опрос и смотреть как появлется и удаляется порт...

Добавлено через 35 секунд
нет возможности работать с реальным USB устройством... мне дали такое железо...надо писать под него....
0
raxp
10163 / 6549 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
02.02.2013, 15:02 #4
...задачу отслеживания выдергивания USB-гаджетов (и даже порта в который установлено), драйвера которых создают в системе виртуальный COM-порт и ассоциируют имя устройства с определенным портом, решил отслеживанием списка устройств через SetupAPI (впрочем, это подходит и для LPT и прочих веток). Если имя не найдено, то порт закрываю и в потоке вызываю перечисление пока не появится ассоциированное имя, если появилось - порт открываю и инициализирую гаджет вновь.

Для сторонних разработчиков реализовал либу "Описание API вызова библиотеки GetNumCom.DLL".
1
Dark2013
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 7
02.02.2013, 15:12  [ТС] #5
СуперСпасибо, будем разибартся))!
0
Cha1000000
2 / 2 / 1
Регистрация: 04.06.2015
Сообщений: 90
Записей в блоге: 1
12.04.2016, 18:48 #6
Добавлено через 5 часов 16 минут
Цитата Сообщение от raxp Посмотреть сообщение
Для сторонних разработчиков реализовал либу "Описание API вызова библиотеки GetNumCom.DLL".
Помогите разобраться с работой вашей либы в проекте С++.
Пробую сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LPWSTR DLLname = L"GetNumCom.dll";
             HINSTANCE LibHandle = LoadLibrary(DLLname);
             if (LibHandle == NULL){ 
                 MessageBox::Show("Не удалось загрузить библиотеку GetNumCom.dll", "Ошибка!");
             }
 
             LPCSTR func_name = "gets";
             FARPROC getport = GetProcAddress(LibHandle, func_name);
             if (getport != 0)
             {
                 typedef void(__stdcall *GetPortName)(unsigned char *dev_name, unsigned char *numport, unsigned char[]);
                 //((GetPortName)getport)(parameters...);   вызов функции
             }
 
             FreeLibrary(LibHandle);
             LibHandle = NULL;
И вот не уверен, правильно ли я с синтаксиса Delphi на С++ параметры перевел в строке
C++
1
typedef void(__stdcall *GetPortName)(unsigned char *dev_name, unsigned char *numport, unsigned char[]);
Поправьте, если я где ошибся и если не затруднит, параллельно подскажите такую вещь... Я планирую в параметр dev_name передавать имя устройств из переменной типа String. Как мне её правильно (я имею в виду преобразование типов) туда передать? Заранее спасибо!
0
Cha1000000
2 / 2 / 1
Регистрация: 04.06.2015
Сообщений: 90
Записей в блоге: 1
14.04.2016, 19:01 #7
Товарищи коллеги, вопрос тем, кто пользовался и разобрался с библиотекой getnumcom.dll
Пытаюсь воспользоваться ей на С++. Сделал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private: System::Void cbDevList_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {  // Обработка выбранного устройства
             String^ DevName = "";
             UCHAR port = '\0';
             unsigned char t[11] = { '\0' };
 
             if (cbDevList->SelectedIndex)
             {
                 DevName = cbDevList->SelectedItem->ToString();     // Записываем имя выбранного устройства в DevName
 
                 LPWSTR DLLname = L"GetNumCom.dll";     // загрузка модуля DLL
                 HINSTANCE LibHandle = LoadLibrary(DLLname);
                 if (LibHandle == NULL){
                     MessageBox::Show("Не удалось загрузить библиотеку GetNumCom.dll", "Ошибка!");
                 }
                 LPCSTR func_name = "gets";     // название загружаемой функции
                 FARPROC getport = GetProcAddress(LibHandle, func_name);
                 if (getport != 0)
                 {
                     typedef int(__stdcall *GetPortName)(unsigned char *dev_name, unsigned char *numport, unsigned char[]);
                     ((GetPortName)getport)((UCHAR*)&DevName, &port, t);
                 }
                 FreeLibrary(LibHandle);
                 LibHandle = NULL;
 
                 MessageBox::Show(Convert::ToString(port), "Попытка получить номер порта"); 
             }
}
Немного подробностей: в cbDevList у меня находится список наименований устройств, подключенных к ПК по USB. Из него беру имя выбираемого устройства и записываю в переменную String^ DevName, из которой потом передаю в качестве параметра в библиотечную функцию gets. По описанию и исходникам тестовой программы на Delphi, я понял, что если в качестве первого параметра передавать функции имя устройства, а второй оставлять пустым, то в этот второй она должна возвращать номер порта. Однако, выбирая различные устройства из списка все время получаю только значение 0.
Кто знает в чем может быть дело, сообщите пожалуйста!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2016, 19:01
Привет! Вот еще темы с ответами:

Перечисление в структуре - C++
Здравствуйте! Я создала перечисление в структуре struct DCBSettings { enum ...

Перечисление переменных - C++
int startPos = 0, endPos; Вот так записать можно? У меня вроде работает, а если с точки зрения классического "правописания"?

Перечисление однообразных переменных - C++
Добрый день. Написал программу тест, которая считает правильные ответы и после завершения выводит количество баллов. Программу саму я...

Задачка на Класы и перечисление - C++
Условие выполнения : в картинке enum Prof { sekretar , laborant , meneger , barmen , povar , oxoronec }; class peoplDate...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
14.04.2016, 19:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru