首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在hello world应用程序中包含setupapi.h时出现编译器错误

在hello world应用程序中包含setupapi.h时出现编译器错误
EN

Stack Overflow用户
提问于 2019-12-21 06:47:28
回答 1查看 438关注 0票数 0

我正在尝试使用SetupDiGetDeviceInterfaceDetail函数调试一些32/64位的C# P/Invoke问题。这涉及到分析SP_DEVICE_INTERFACE_DETAIL_DATA结构。为此,我尝试编写一个简单的C++程序来查看未记录的数据。我的C语言技能不足以从定义中读取结构大小。

下面是使用Visual Studio2017创建的一个新的C++ Windows控制台应用程序的代码:

代码语言:javascript
复制
#include "pch.h"
#include <iostream>
#include <Setupapi.h>

int main()
{
    std::cout << "Size: " << sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) << "\n";
}

一旦我添加了第三个include,我就得到了关于微软文件中语法错误的1600+编译器错误-缺少分号,类型说明符和其他东西,分布在几个文件中,比如setupapi.h,prsht.h,dpa_dsa.h或commctrl.h。这完全超出了我的能力范围。看起来微软把事情搞得一团糟。如果C++编程总是这样,我想知道Visual Studio是如何编译的。

这是怎么回事?为什么我不能像文档中建议的那样包含那个头文件呢?

有没有其他方法可以找出该sizeof表达式将解析成什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 07:05:15

下面是一个固定的版本:

代码语言:javascript
复制
#include <iostream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <Setupapi.h>

int main()
{
    std::cout << "Size: " << sizeof( SP_DEVICE_INTERFACE_DETAIL_DATA ) << "\n";
}

它打印6,但这不是真的,不幸的是,结构是可变长度的。它的定义如下:

代码语言:javascript
复制
#define ANYSIZE_ARRAY 1
struct SP_DEVICE_INTERFACE_DETAIL_DATA_W
{
    DWORD  cbSize;
    WCHAR  DevicePath[ ANYSIZE_ARRAY ];
}

长度因数据而异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59432077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档