gpt4 book ai didi

c++ - 通过 winapi 与 QT 读取 comport

转载 作者:行者123 更新时间:2023-11-28 08:02:03 26 4
gpt4 key购买 nike

我正在尝试获取当前正在使用的组件列表,以便在我的 GUI 中显示它们。我正在使用以下代码:

   TCHAR szComPort[8];
HANDLE hCom = NULL;
char str[20];

for (int i = 1; i <= 255; ++i)
{
if (i < 10)
wsprintf(szComPort, ("COM%d"), i);
else
wsprintf(szComPort, ("\\\\.\\COM%d"), i);

hCom = CreateFile(szComPort,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);

if (INVALID_HANDLE_VALUE != hCom)
{
sprintf_s(str,"COM%d",i);
ui->COMLIST->addItem(str);
}
CloseHandle(hCom);
}

这在我的笔记本电脑上运行良好,但由于某种原因,它在我的 PC 上使 QT 崩溃,因为 comports 10 和更高版本(这意味着如果我将 i<=255 更改为 i<=9 它运行良好),

有什么想法吗?

谢谢!

最佳答案

szComPort 缓冲区中有 8 个 wchar,您正在为 COM10 及更高版本写入 10 个字符,为 COM11 及更高版本写入 11 个字符。使缓冲区至少 11 个单位。

编辑:通常的做法是使缓冲区足够大并有足够的斜率,这样您就不必计算字符数。我可能只是看一下字符串,认为它有大约 10 个字符,所以对于格式化值,它不会导致 30 个字符,并声明缓冲区 32 个项目。堆栈有足够的空间容纳这几个额外的字节,您甚至无需对其进行初始化,因此没有性能损失并且风险较小。

关于c++ - 通过 winapi 与 QT 读取 comport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184559/

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