c++ - 使用 MSVC2010 在动态 QT 中使用 RegOpenKey 和 RegEnumKey

标签 c++ qt winapi linker linker-errors

如前所述,我想使用 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

之后再次运行 qmakebuild

[更新] 可能需要手动删除生成的 makefile,然后再次运行 qmake 重新创建它们。

关于c++ - 使用 MSVC2010 在动态 QT 中使用 RegOpenKey 和 RegEnumKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114622/

相关文章:

c++ - 为什么循环 for stringstream 两次给我最后一个词

c++ - 使用客户的电子邮件应用程序发送带附件的电子邮件

c++ - 析构函数应该是线程安全的吗?

c++ - 信号触发,但对话未聚焦

c++ - Qt : AddressBook tutorial 中的内存管理

c# - 如何从 Windows 中打开的应用程序中读取值?

c++ - 使用 WINAPI 如何更改复选框按钮的值?

c++ - 如何散列 std::regex?

c++ - 第三方库调用中的应用程序卡住

c++ - 如何编写垂直右侧的 IE 资源管理器栏