crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

14 страниц V  « < 11 12 13 14 >  
Ответить в данную темуНачать новую тему
> QtSerialPort, Проблема сборки QtSerialPort под Windows
ahalaj
  опции профиля:
сообщение 25.10.2014, 10:30
Сообщение #121


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Цитата(borune @ 24.10.2014, 8:28) *
ahalaj, спасибо большое, но мне хотелось бы все же через QSerialPort сделать. В такие дебри лезть неохота, если честно, но за помощь спасибо тебе.

А kuzulis прав!

Цитата(kuzulis @ 21.10.2014, 19:57) *
Ах, если имелось ввиду найти все у-ва которые когда-либо были подключены и определены, а теперь являются "скрытыми" hidden (т.к. их например, выдернули из USB) и кстати, их можно отобразить в диспетчере устройств.

То это не проблема, достаточно удалить (закомментировать) DIGCF_PRESENT в qserialportinfo_win.cpp и пересобрать.

Посмотрел я на код qserialportinfo_win.cpp, там практически то же самое, что у меня. Закоментировал DIGCF_PRESENT

[...]

static inline const QList<GuidFlagsPair>& guidFlagsPairs()
{
    static const QList<GuidFlagsPair> guidFlagsPairList = QList<GuidFlagsPair>()
        // Standard Setup Ports Class GUID
        << qMakePair(QUuid(0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), 0 /*DWORD(DIGCF_PRESENT)*/)
        // Standard Setup Modems Class GUID
        << qMakePair(QUuid(0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), 0 /*DWORD(DIGCF_PRESENT)*/)
        // Standard Serial Port Device Interface Class GUID
        << qMakePair(QUuid(0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73), DWORD(/*DIGCF_PRESENT |*/DIGCF_DEVICEINTERFACE))
        // Standard Modem Device Interface Class GUID
        << qMakePair(QUuid(0x2C7089AA, 0x2E0E, 0x11D1, 0xB1, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xAA, 0xE4), DWORD(/*DIGCF_PRESENT |*/DIGCF_DEVICEINTERFACE));
    return guidFlagsPairList;
}

[...]


пересобрал 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

После делаем так:

cd C:\Qt\5.3\Src\qtserialport\src
qmake
nmake


Вновь собранные debug и release .dll теперь находятся тут:

cd ..\lib
dir *.dll

Volume in drive C has no label.
Volume Serial Number is 94E6-4722

Directory of C:\Qt\5.3\Src\qtserialport\lib

26.10.2014  19:08            56,832 Qt5SerialPort.dll
26.10.2014  19:08           122,880 Qt5SerialPortd.dll
               2 File(s)        179,712 bytes
               0 Dir(s)  300,561,043,456 bytes free


А .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 @ 26.10.2014, 21:48) *
Да, скопировать. Но не в папку .lib, а в ту папку, где оказывается твой целевой exe'шник.


хм, а почему туда..ты ж сам описал порядок поиска требуемых dll..он в итоге должен дойти до каталога с компилятором, где все dll лежат, и оттуда его взять
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 27.10.2014, 8:51
Сообщение #127


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Цитата(borune @ 27.10.2014, 8:20) *
Цитата(ahalaj @ 26.10.2014, 21:48) *
Да, скопировать. Но не в папку .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  


Цитата(ahalaj @ 27.10.2014, 9:51) *
Цитата(borune @ 27.10.2014, 8:20) *
Цитата(ahalaj @ 26.10.2014, 21:48) *
Да, скопировать. Но не в папку .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 работает, но это все равно не то. Если порт есть, но к нему не подключен кабель, то этот порт нельзя открыть, и, соответственно, записать в него также ничего нельзя. Но это уже похоже на фишечку драйвера виртуального ком-порта, и ее никак не исправишь наверное...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

14 страниц V  « < 11 12 13 14 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.9.2019, 12:51