簡體   English   中英

通過Winapi與QT進行交流

[英]Reading comport with QT through winapi

我正在嘗試獲取當前正在用它們在我的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 10或更高版本的QT崩潰(這意味着如果我將i <= 255更改為i <= 9,它可以正常工作),

有任何想法嗎?

謝謝!

szComPort緩沖區中有8個wchar,您要為COM10及更高版本寫10個字符,為COM11及更高版本寫11個字符。 使緩沖區至少11個單位。

編輯:通常的做法是使緩沖區足夠大,並具有足夠的傾斜度,這樣您就不必計算字符了。 我可能只是看一下字符串,認為它有大約10個字符,因此帶有格式化值的東西不會導致30,並聲明緩沖區32個項目。 堆棧有足夠的空間來容納這幾個額外的字節,並且您甚至都沒有初始化它,因此沒有性能損失,並且風險更低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM