Qt調用頭文件setupapi.h的函數SetupDiGetClassDevs()編譯出錯

博主用QtCreator集成開發環境和MinGW32編譯器編譯Windows下的API函數,即頭文件setupapi.h中的函數SetupDiGetClassDevs()時,編譯出錯。

1.1問題

錯誤如下:

D:\QtProject\test1\exam1\widget.cpp:20: error: undefined reference to `_imp__SetupDiGetClassDevsW@16'

這個錯誤莫名其妙,因爲博主關聯了Windows API調用頭文件#include <windows.h>和#include <setupapi.h>,但是編譯時仍然出錯,博主查看了msdn用沒找出錯誤在哪裏。後來在一個羣裏,終於找到了解決方案,出現這個錯誤的原因是因爲沒有關聯繫統庫,所以解決辦法是關聯setupapi的系統庫就行。

1.2解決方案

下面是解決方案,給工程添加系統庫,步驟如下圖所示:

 

 

編譯後,結果如下所示

1.3總結

由上述結果可知,添加了系統靜態庫後,可以正常調用Windows系統api函數中setupapi.h頭文件內的所有函數。

在qt中調用Windows API函數有時需要自己關聯繫統庫時,不僅僅需要相關的頭文件,有些還需要自己關聯繫統庫,就跟本文示例一樣;但是有些系統函數在qt下調用時不需要自己關聯繫統庫。

至於是否需要,可以直接查看微軟的MSDN相關函數,如下面所示是msdn對函數SetupDiGetClassDevs()用法的描述:

網址:https://docs.microsoft.com/zh-cn/windows/desktop/api/setupapi/nf-setupapi-setupdigetclassdevsw

 

 

參考內容:

https://docs.microsoft.com/zh-cn/windows/desktop/api/setupapi/nf-setupapi-setupdigetclassdevsw(參考:MSDN關於函數SetupDiGetClassDevs()的講解)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章