博主用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()的講解)