Не удается загрузить QtBluetooth 5.12.0 под Windows 7
Я перенес некоторый код из Qt 5.6.0 в Qt 5.12.0, скомпилированный с Visual Studio 2015. В нем есть код, использующий QtBluetooth
для обычного (без "малой энергии") блютуса. С 5.6.0 это работало идеально.
С Qt 5.12.0 мое приложение не загружается. Сообщает о пропаже API-MS-WIN-CORE-WINRT-L1-1-0.DLL
а также API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
, Я не понимаю, зачем нужны эти файлы WinRT. Зависимость Уокер для QtBluetooth.dll
сообщает об этих библиотеках как пропавших без вести.
Я попробовал оба с Qt 5.12.0 скомпилировал свой selft и скачал как часть QtCreator
установить. Я пробовал как Windows 7, так и 10, Windows 10 работает шустро. Всегда получаю эту ошибку, и я не нашел информации о том, где найти эти библиотеки или как QtBluetooth
не использовать их.
Что я должен сделать, чтобы просто иметь возможность запустить QtBluetooth
приложение под Windows?
Редактировать: представленная ошибка Qt: https://bugreports.qt.io/browse/QTBUG-73272
1 ответ
Если у вас нет требований к низкому энергопотреблению и вы можете отвлечь пользователей от сопряжения устройства с помощью диалогового окна настроек системы Windows, то я бы порекомендовал написать код-обертку для окон, которые не используют QtBluetooth. Т.е.
#include <Windows.h>
class win_con {
....
HANDLE hcon;
COMMTIMEOUTS *timeouts;
// i.e. com_port = L"\\\\.\\COM1";
void open_com(std::wstring com_port, int read_timeout, int write_timeout)
{
hcom = CreateFile(com_port.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr,
OPEN_EXISTING, 0, nullptr);
if (hcom == INVALID_HANDLE_VALUE) ...
timeouts = new COMMTIMEOUTS();
memset(timeouts, 0, sizeof(COMMTIMEOUTS));
timeouts->ReadTotalTimeoutConstant = read_timeout;
timeouts->WriteTotalTimeoutConstant = write_timeout;
if (!SetCommTimeouts(hcom, timeouts)) ...
}
void write_data(QString data)
{
std::string stddata = data.toStdString();
DWORD numwritten = 0;
if (!WriteFile(hcom, stddata.c_str(),
static_cast<DWORD>(stddata.length()), &numwritten, nullptr)) {
...
}
}
QString read_data(int len)
{
#define BUFFER_SIZE 256
char buffer[BUFFER_SIZE];
DWORD data_read = 0;
if (BUFFER_SIZE < len) ....
for (int i = 0; i < BUFFER_SIZE; i++)
buffer[i] = 0;
ReadFile(hcom, &buffer, len, &data_read, nullptr);
if (read == 0) ...
if (read < len) ...
return QString(buffer);
}
}