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