HWID Windows - Использование Qt Framework - PullRequest
0 голосов
/ 11 марта 2012

Я делаю что-то, что должно получить HWID кросс-платформенного компьютера. Это на C ++, и я использую инфраструктуру Qt с Qt Creator. Я действительно не нашел много на этом, поэтому я объясню. Я пытаюсь получить HWID в Windows, и он продолжает говорить, что у меня есть неразрешенные внешние символы, как только я пытаюсь скомпилировать его. Вот мой код для 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 @ MainWindow @@ QAE? AVQString @@ XZ)

и

debug \ MCBruter.exe: -1: ошибка: LNK1120: 1 неразрешенный внешний код

Я на 99% уверен, что нижний вызван моим первым, так что я бы просто проигнорировал это. Я понятия не имею, что делать ... Mac работает нормально, только Windows создает мне проблемы. Спасибо, Хетелек.

1 Ответ

1 голос
/ 11 марта 2012

У вас есть ошибка компоновщика, вызванная тем, что вы включили соответствующий включаемый файл, но не связали свои объектные файлы с правильной библиотекой импорта. Добавьте Advapi32.lib к библиотекам для ссылки, и ошибка исчезнет.

Кстати, правильная библиотека для ссылки на конкретный API всегда указывается в его документации в MSDN: если вы посмотрите на страницу GetCurrentHwProfile, вы найдете:

Заголовок: Winbase.h (включая Windows.h)

Библиотека: Advapi32.lib

DLL: Advapi32.dll

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...