1

我正在使用 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++ 的初学者,所以我可能会遗漏一些明显的东西,但这就是他们在指南中的做法。任何建议都会很棒。

4

3 回答 3

3

文档说谎,GUID 实际上是在 devguid.h 中定义的。另外(如果你还没有在另一个源文件中这样做)你需要

#define INITGUID

在包括 BatClass.h 和 devguid.h 之前。如果你的项目中没有这个,你会在链接时得到一个未定义的符号错误,如果你有多个,则会在链接时得到一个多重定义的符号错误。

于 2013-02-07T22:28:17.747 回答
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 添加到项目选项|参数|链接器

该程序未经测试运行。它只能正确编译。

于 2013-02-07T23:00:35.853 回答
0

devguid.h在我的 mingw/GCC 头文件和我的 MSSDK 旧副本中定义。

尝试添加这个:

#include <devguid.h>
于 2013-02-07T22:27:45.720 回答