HWID Windows - 使用Qt框架

时间:2012-03-10 23:20:19

标签: c++ qt

我正在制作一些需要获得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。

1 个答案:

答案 0 :(得分:1)

您所拥有的是链接器错误,这是由于您已包含相关的包含文件,但尚未将目标文件与正确的导入库相关联。将Advapi32.lib添加到要链接的库中,错误将消失。

顺便说一下,在MSDN的文档中总是指定要链接到特定API的正确库:如果你查看page of GetCurrentHwProfile,你会发现:

  

标题: Winbase.h(包括Windows.h)

     

图书馆: Advapi32.lib

     

DLL: Advapi32.dll