我正在制作一些需要获得cmoputer,跨平台的HWID的东西。这是用C ++编写的,我正在使用Qt框架和Qt Creator。我真的没有找到太多,所以我会解释。我试图在Windows上获取HWID,并且一旦我尝试编译它就会说我有未解析的外部符号。这是我的HWID代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#ifdef _WIN32 | _WIN64//Windows
#define _WIN32_WINNT 0x0400
#include <Windows.h>
#define get_hwid() windows_hwid()
#elif defined __APPLE__ //Mac
#define get_hwid() mac_hwid()
#else //Unknown OS
#define get_hwid() unknown_hwid()
#endif
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMessageBox::about(this, "About", get_hwid());
}
QString MainWindow::windows_hwid()
{
HW_PROFILE_INFO hwProfInfo;
if(GetCurrentHwProfile(&hwProfInfo))
{
return "we got it.";
}
return "couldn't get it";
}
QString MainWindow::mac_hwid()
{
QProcess proc;
QStringList args;
args << "-c" << "ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { print $3; }'";
proc.start( "/bin/bash", args );
proc.waitForFinished();
return proc.readAll();
}
QString MainWindow::unknown_hwid()
{
return "hello unknown person!";
}
这会抛出这些错误:
mainwindow.obj:-1:错误:LNK2019:未解析的外部符号_ imp _GetCurrentHwProfileW @ 4在函数“public:class QString __thiscall MainWindow :: windows_hwid(void)”中引用(?windows_hwid @主窗口@@ QAE?AVQString @@ XZ)
和
debug \ MCBruter.exe:-1:错误:LNK1120:1个未解析的外部
我99%肯定底部的一个是我的第一个,所以我会忽略它。我不知道该怎么办... Mac一个正常,只有Windows一个给我带来问题。谢谢,Hetelek。
答案 0 :(得分:1)
您所拥有的是链接器错误,这是由于您已包含相关的包含文件,但尚未将目标文件与正确的导入库相关联。将Advapi32.lib
添加到要链接的库中,错误将消失。
顺便说一下,在MSDN的文档中总是指定要链接到特定API的正确库:如果你查看page of GetCurrentHwProfile
,你会发现:
标题: Winbase.h(包括Windows.h)
图书馆: Advapi32.lib
DLL: Advapi32.dll