阅读符合QT通过winapi
Reading comport with QT through winapi
我正在尝试获取当前用于在我的 GUI 中呈现它们的 comports 列表。我正在使用以下代码:
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 上崩溃了 10 及更高版本的 QT(这意味着如果我将 i<=255 更改为 i<=9,它可以正常工作),
有什么想法吗?
谢谢!
szComPort
缓冲区中有 8 个 wchar,您正在为 COM10 及更高版本写入 10 个字符,为 COM11 及更高版本写入 11 个字符。使缓冲区至少为 11 个单位。
编辑:通常的做法是使缓冲区足够大,有足够的倾斜,这样你就不必计算字符数。我可能只看字符串,认为它有大约 10 个字符,所以对于格式化值,它不会产生 30 并声明缓冲区 32 个项目。堆栈有足够的空间容纳这几个额外的字节,你甚至没有初始化它,所以没有性能损失,风险也更小。
相关文章:
- 通过方法访问结构
- 通过递归进行因子分解
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++如何通过用户输入删除列表元素
- 通过多个头文件使用常量变量
- 是否可以通过C++扩展强制多个python进程共享同一内存
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- Winapi:可以通过异步程序调用中断消息循环
- 使用 Win32/WINAPI 通过内存映射文件传输数据
- 阅读符合QT通过winapi
- 通过WinAPI禁用/启用网络接口
- 如何通过指针来调用winapi函数
- 通过Winapi以编程方式编辑Windows审核策略时出现权限错误
- 通过WinAPI提取字体版本
- WINAPI通过GetProcAddress调用导出函数
- Winapi钩子通过mhook导致程序崩溃或挂起
- 通过WinApi调整WebKit COM的大小
- 通过WinAPI套接字连接到蓝牙设备时崩溃(读取位置0x00000004时发生访问冲突)
- 通过WinAPI打开/关闭/管理Windows 8应用程序