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 をインクルードする前に。プロジェクトにこれが 1 つもないと、リンク時に未定義のシンボル エラーが発生し、複数定義されている場合は、リンク時に複数定義シンボル エラーが発生します。

于 2013-02-07T22:28:17.747 に答える
0

devguid.h私のmingw/GCCヘッダーとMSSDKの古いコピーで定義されています。

これを追加してみてください:

#include <devguid.h>
于 2013-02-07T22:27:45.720 に答える
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 に答える