如前所述,我想使用 2 个 winapi 函数进行注册表访问。 我有 QT 5.3.2,安装了 QT Creator 3.2.0、MSVC2010 版本、Windows SDK v7.1 和调试工具。
windows.h
包含在我的项目中并且可以看到两个函数,但是链接器失败
usb_part.obj:-1: error: LNK2019: unresolved external symbol __imp__RegEnumKeyW@16 referenced in function "bool __cdecl GetUsbName(class QString &)" (?GetUsbName@@YA_NAAVQString@@@Z)
usb_part.obj:-1: error: LNK2019: unresolved external symbol __imp__RegOpenKeyW@12 referenced in function "bool __cdecl GetUsbName(class QString &)" (?GetUsbName@@YA_NAAVQString@@@Z)
我想它会尝试动态链接那些函数(因此是“__imp”),我怎样才能将它设置为链接静态 .lib
文件?或者,如果动态构建的 QT 无法做到这一点,我如何将它们链接到 .dll
?
更新: 试过这些:
LIBS += -ladvapi32
LIBS += AdvAPI32.Lib
LIBS += "c:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\AdvAPI32.Lib"
没用
UPD2:
问题是 QT 在更改 .pro
后没有重新创建 makefile。在我删除 makefile 后,LIBS += -ladvapi32
工作正常。认为“清理项目”可以做到这一点,但事实证明并非如此。
最佳答案
您应该添加到您的 .pro 文件
LIBS += -lAdvapi32
或
LIBS += Advapi32.lib
之后再次运行 qmake
和 build
。
[更新] 可能需要手动删除生成的 makefile,然后再次运行 qmake
重新创建它们。
关于c++ - 使用 MSVC2010 在动态 QT 中使用 RegOpenKey 和 RegEnumKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114622/