QtSerialPort, Проблема сборки QtSerialPort под Windows |
Здравствуйте, гость ( Вход | Регистрация )
QtSerialPort, Проблема сборки QtSerialPort под Windows |
ahalaj |
25.10.2014, 10:30
Сообщение
#121
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
ahalaj, спасибо большое, но мне хотелось бы все же через QSerialPort сделать. В такие дебри лезть неохота, если честно, но за помощь спасибо тебе. А kuzulis прав! Ах, если имелось ввиду найти все у-ва которые когда-либо были подключены и определены, а теперь являются "скрытыми" hidden (т.к. их например, выдернули из USB) и кстати, их можно отобразить в диспетчере устройств. То это не проблема, достаточно удалить (закомментировать) DIGCF_PRESENT в qserialportinfo_win.cpp и пересобрать. Посмотрел я на код qserialportinfo_win.cpp, там практически то же самое, что у меня. Закоментировал DIGCF_PRESENT
пересобрал C:\Qt\5.3\Src\qtserialport\examples\serialport\enumerator и QSerialPortInfo::availablePorts() стал показывать не только реально подключенные устройства, но и те, которые зарегистрированы в системе, но не подключены в данный момент. Проверял на телефоне Nokia, единственное различие в выводе примера enumerator это то, что он не показывает IMEI телефона когда он не подключен, а так всё то же самое: оригинальный код когда телефон не подключен: оригинальный код когда телефон подключен: модифицированный код с закоментированным DIGCF_PRESENT когда телефон не подключен: модифицированный код с закоментированным DIGCF_PRESENT когда телефон подключен: Так что или модифицировать qserialportinfo_win.cpp, или делать то же самое, но вручную, без QSerialPortInfo, других способов похоже нет. |
|
|
borune |
26.10.2014, 18:16
Сообщение
#122
|
Участник Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: 0 |
а ты как модифицированную версию QserialPort ставил, я просто пробовал через make и make install, вывод ничем не отличался от того, что было
|
|
|
ahalaj |
26.10.2014, 19:24
Сообщение
#123
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
Сначала модифицируем как надо C:\Qt\5.3\Src\qtserialport\src\serialport\qserialportinfo_win.cpp
После делаем так:
Вновь собранные debug и release .dll теперь находятся тут:
А .lib пофигу, они подходят и к родным, и к модифицированным. Затем я просто брал отсюда Qt5SerialPort.dll и клал в тот каталог, где лежал откомпилированный пример enumerator.exe Ведь .dll без явного указания пути ищутся сначала в текущем каталоге, если там нет, то в каталоге откуда запущен .exe, если и там нет, то во всех каталогах переменной %PATH%. Т.к. мой лежал там же, где сам enumerator.exe, то родная .dll из C:\Qt\5.3\msvc2010_opengl\bin\Qt5SerialPort.dll не бралась, модифицированная находилась раньше и именно она использавалась при запуске enumerator.exe. Вот как-то так. |
|
|
borune |
26.10.2014, 20:17
Сообщение
#124
|
Участник Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: 0 |
так что сделать нужно, скопировать Qt5SerialPort.dll и Qt5SerialPortd.dll из папки сборки в папку lib моего компилятора?
Сообщение отредактировал borune - 26.10.2014, 20:21 |
|
|
ahalaj |
26.10.2014, 20:48
Сообщение
#125
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
Да, скопировать. Но не в папку .lib, а в ту папку, где оказывается твой целевой exe'шник.
|
|
|
borune |
27.10.2014, 8:20
Сообщение
#126
|
Участник Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
ahalaj |
27.10.2014, 8:51
Сообщение
#127
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
Да, скопировать. Но не в папку .lib, а в ту папку, где оказывается твой целевой exe'шник. хм, а почему туда..ты ж сам описал порядок поиска требуемых dll..он в итоге должен дойти до каталога с компилятором, где все dll лежат, и оттуда его взятьНу можно и в ту папку, где лежат все стандартные .dll от Qt. Просто тогда придётся новую dll записывать поверх стандартно-родной и соответственно стандартно-родной уже в оригинале не останется. А так когда кладёшь её в папку с exe'шником и волки получаются сыты (exe использует новую dll) и овцы целы (оригинальную dll из поставки Qt никто не трогает). |
|
|
borune |
27.10.2014, 10:01
Сообщение
#128
|
Участник Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да, скопировать. Но не в папку .lib, а в ту папку, где оказывается твой целевой exe'шник. хм, а почему туда..ты ж сам описал порядок поиска требуемых dll..он в итоге должен дойти до каталога с компилятором, где все dll лежат, и оттуда его взятьНу можно и в ту папку, где лежат все стандартные .dll от Qt. Просто тогда придётся новую dll записывать поверх стандартно-родной и соответственно стандартно-родной уже в оригинале не останется. А так когда кладёшь её в папку с exe'шником и волки получаются сыты (exe использует новую dll) и овцы целы (оригинальную dll из поставки Qt никто не трогает). ну так если нужна будет стандартная, снова собираешь и меняешь) |
|
|
ahalaj |
27.10.2014, 11:25
Сообщение
#129
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
А зачем снова менять и собирать если нужна стандартная? Стандартная пусть всегда на месте остаётся, а модифицированная единовременно собирается для конкретного проекта и поставляется вместе с ним. Я так и сделал из расчёта чтобы как раз стандартную и не менять.
|
|
|
borune |
28.10.2014, 15:57
Сообщение
#130
|
Участник Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я попробовал дома, enumerator работает, но это все равно не то. Если порт есть, но к нему не подключен кабель, то этот порт нельзя открыть, и, соответственно, записать в него также ничего нельзя. Но это уже похоже на фишечку драйвера виртуального ком-порта, и ее никак не исправишь наверное...
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 16:11 |