Я использую Windows API для получения различной информации об оборудовании, такой как использование процессора и батареи. Я пытался получить имена названий устройств батареи, следуя этому руководству http://msdn.microsoft.com/en-us/library/windows/desktop/bb204769%28v=vs.85%29.aspx но я застрял, когда доберусь сюда.
#define INITGUID
#include<windows.h>
#include<batclass.h>
#include<setupapi.h>
#include<devguid.h>
using namespace std;
int main()
{
HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVCLASS_BATTERY, 0, 0, DIGCF_PRESENT
| DIGCF_DEVICEINTERFACE);
}
но я получаю следующую ошибку
[Linker error] C:\Users\Owner\AppData\Local\Temp\ccTMeaf9.o:Untitled1.cpp:(.text+0x28): undefined reference to `__imp_SetupDiGetClassDevsA' collect2: ld returned 1 exit status
Я новичок в C ++, поэтому я могу упустить что-то очевидное, но это то, как они это делают в руководстве. Будем признательны любому совету.
В документации говорилось, что GUID на самом деле определен в devguid.h. Кроме того (если вы еще не делаете это в другом исходном файле), вам нужно
#define INITGUID
перед включением BatClass.h и devguid.h. Вы получите неопределенную символьную ошибку во время ссылки, если у вас ее нет один раз в проекте, и многократную символьную ошибку во время ссылки, если у вас их больше одного.
Это определено в devguid.h
в моих заголовках mingw / GCC и моей старой копии MSSDK.
Попробуйте добавить это:
#include <devguid.h>
Следующий код компилируется здесь, на DevCPP:
#define INITGUID
#include <windows.h>
#include<ddk\batclass.h>
#include<setupapi.h>
int main() {
{
HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVICE_BATTERY, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
}
Заметка GUID_DEVICE_BATTERY.
Для того, чтобы получить правильное связывание, вы должны добавить в проект параметры | Параметры | Компоновщик библиотеки libsetupapi.a
Программа не проверена для запуска. Он только правильно компилируется.