gpt4 book ai didi

c++ - Windows 7下无法加载QtBluetooth 5.12.0

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:35 27 4
gpt4 key购买 nike

我将一些代码从 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.DLLAPI-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL 。我不明白为什么需要那些 WinRT 文件。 QtBluetooth.dll 的 Dependency Walker 报告这些库丢失。

我尝试使用 Qt 5.12.0 编译我自己并作为 QtCreator 安装的一部分下载。我尝试了 Windows 7 和 10,Windows 10 运行良好。总是出现这个错误,我没有找到关于在哪里可以找到这些库或如何让 QtBluetooth 不使用它们的信息。

我应该怎么做才能在 Windows 下简单地运行基于 QtBluetooth 的应用程序?

编辑:提交的 Qt 错误:https://bugreports.qt.io/browse/QTBUG-73272

最佳答案

如果您对低功耗没有要求并且可以打扰您的用户使用 Windows 系统设置对话框配对设备,那么我建议为不使用 QtBluetooth 的 Windows 编写包装代码。即

#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);
}
}

关于c++ - Windows 7下无法加载QtBluetooth 5.12.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com