【问题标题】:Enumerating battery devices c++ windows枚举电池设备 c++ windows
【发布时间】:2013-02-07 22:21:08
【问题描述】:

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

【问题讨论】:

    标签: c++ winapi battery


    【解决方案1】:

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

    #define INITGUID
    

    在包含 BatClass.h 和 devguid.h 之前。如果您的项目中没有此符号一次,您将在链接时收到未定义符号错误,如果您有多个,则会在链接时收到多次定义符号错误。

    【讨论】:

    • 好的,然后编辑了帖子,但现在我遇到了一个新错误
    • 您是否链接到 setupapi.lib? msdn.microsoft.com/en-us/library/ff551069.aspx
    • 我试过 g++.exe g++.exe C:\Users\Owner\Desktop\g++.exe setupapi.lib: 没有这样的文件或目录。
    【解决方案2】:

    它在我的 mingw/GCC 标头和我的旧版 MSSDK 中的 devguid.h 中定义。

    尝试添加这个:

    #include <devguid.h>
    

    【讨论】:

      【解决方案3】:

      以下代码在 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 添加到项目选项|参数|链接器

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

      【讨论】:

      • 我得到了 g++.exe g++.exe C:\Users\Owner\Desktop\g++.exe setupapi.a: 没有这样的文件或目录。
      • 我不知道你必须如何从命令行设置链接器。在我的 DevCpp IDE 安装中,提到的库位于“c:/DevCpp/lib/libsetupapi.a”中,您必须按照我上面的回答中的描述创建项目并设置项目选项才能与该库链接。
      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多