2013-02-07 85 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文件夾中 –