我使用windows api获取各种硬件信息,例如cpu使用情况和电池信息。我一直试图通过遵循本指南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 ++的初学者,所以我可能会遗漏一些明显的东西,但这就是他们在指南中的表现。任何建议都会很棒。
答案 0 :(得分:3)
文档说谎,GUID实际上是在devguid.h中定义的。另外(如果您还没有在另一个源文件中执行此操作),则需要
#define INITGUID
在包含BatClass.h和devguid.h之前。如果项目中没有此项,则链接时会出现未定义的符号错误,如果您有多个符号错误,则链接时会出现多重定义的符号错误。
答案 1 :(得分:0)
在我的mingw / GCC标题中的devguid.h
和我的旧版MSSDK中定义了它。
尝试添加此内容:
#include <devguid.h>
答案 2 :(得分:0)
以下代码在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
该程序未经过测试运行。它只能正确编译。