2013-02-07 62 views
1

我正在使用Windows API获取各种硬件信息,如CPU使用情况和电池信息。我一直试图通过按照本指南http://msdn.microsoft.com/en-us/library/windows/desktop/bb204769%28v=vs.85%29.aspx获取电池设备的名称,但当我到达此处时我卡住了。枚举电池设备c + + windows

#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

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

尝试添加此:

#include <devguid.h> 
+0

是的,我得到了那部分,并redited我的代码 –

3

文档谎称,该GUID在devguid.h实际上定义。同时,(如果你不是已经这样做了于另一种源文件),你需要

#define INITGUID 

包括BatClass.h和devguid.h之前。如果您的项目中没有这样的代码,您将在链接时收到一个未定义的符号错误,如果您有多个代码,则在链接时会出现多重定义的符号错误。

+0

确定得到了这一点,并编辑帖子accoedingly,但现在我得到一个新的错误 –

+0

你链接反对setupapi.lib? http://msdn.microsoft.com/en-us/library/ff551069.aspx – HerrJoebob

+0

我试过并得到g ++。exe g ++。exe C:\ Users \ Owner \ Desktop \ g ++。exe setupapi.lib:没有这样的文件或者目录。 –

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

程序未测试的库运行。它只编译正确。

+0

我得到了g ++。exe g ++。exe C:\ Users \ Owner \ Desktop \ g ++。exe setupapi.a:没有这样的文件或目录。 –

+0

我不知道如何从命令行设置链接器。在我的DevCpp IDE安装中,所提到的库位于“c:/DevCpp/lib/libsetupapi.a”中,您必须按照上面的答案中所述创建项目并设置项目选项才能链接此库。 – johnfound

+0

好吧,我发现它埋在我的dev cpp文件夹中 –