C++ 在MSVC2010的动态QT中使用RegOpenKey和RegEnumKey

C++ 在MSVC2010的动态QT中使用RegOpenKey和RegEnumKey,c++,qt,winapi,linker,linker-errors,C++,Qt,Winapi,Linker,Linker Errors,如前所述,我想使用2个winapi函数进行注册表访问。 我已经安装了Qt5.3.2和QtCreator 3.2.0、MSVC2010版本、WindowsSDK v7.1和调试工具 windows.h包含在我的项目中,可以看到这两个函数,但链接器失败 usb_部件obj:-1:错误:LNK2019:未解析的外部符号\uu imp__RegEnumKeyW@16在函数“bool\uu cdecl GetUsbName(类QString&)”中引用(?GetUsbName@@YA\u NAAVQStr

如前所述,我想使用2个winapi函数进行注册表访问。 我已经安装了Qt5.3.2和QtCreator 3.2.0、MSVC2010版本、WindowsSDK v7.1和调试工具

windows.h
包含在我的项目中,可以看到这两个函数,但链接器失败

usb_部件obj:-1:错误:LNK2019:未解析的外部符号\uu imp__RegEnumKeyW@16在函数“bool\uu cdecl GetUsbName(类QString&)”中引用(?GetUsbName@@YA\u NAAVQString@@@Z)

usb_部件obj:-1:错误:LNK2019:未解析的外部符号\uu imp__RegOpenKeyW@12在函数“bool\uu cdecl GetUsbName(类QString&)”中引用(?GetUsbName@@YA\u NAAVQString@@@Z)

我假设它尝试动态链接这些函数(hense the“u imp”),如何将其设置为针对静态
.lib
文件进行链接?或者,如果动态构建的QT无法实现这一点,我如何将它们链接到
.dll


UPD: 尝试了以下方法:

LIBS += -ladvapi32
LIBS += AdvAPI32.Lib
LIBS += "c:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\AdvAPI32.Lib"
无济于事


UPD2:
问题在于QT在更改
.pro
后未重新创建makefiles。删除makefiles后,
LIBS+=-ladvapi32
工作正常。本以为“Clean project”可以做到这一点,但事实证明并非如此。

您应该将其添加到.pro文件中

LIBS += -lAdvapi32

然后再次运行
qmake
build


[更新]可能需要手动删除生成的makefiles,并使用
qmake
重新创建它们。

尝试过,不同版本的makefiles(如指定完整路径)仍然没有结果(请参阅更新)尝试手动删除生成的makefiles,然后通过运行qmake再次创建它们。。。或者您可以尝试手动查找在生成的makefiles中指定的libs,以避免手动删除它们。手动删除makefiles在这里似乎有所帮助,
libs+=-ladvapi32
现在可以工作了。我只是想知道为什么QT不在“cleanproject”QT中删除它们,而是在构建和构建生成的makefile的步骤中删除它们。因为makefiles是由qmake生成的,清理不会影响它们,所以需要从Qt Creator build菜单运行qmake来更新makefiles。如果makefiles没有得到更新(我在Windows上也经常遇到这样的问题),那么它看起来像是qmake bug。
LIBS += Advapi32.lib