繁体   English   中英

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

[英]Compiler errors when including setupapi.h in hello world app

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

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

#include "pch.h"
#include <iostream>
#include <Setupapi.h>

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

一旦我添加了第三个包含,我就会收到 1600 多个关于 Microsoft 文件中语法错误的编译器错误——缺少分号、类型说明符和其他东西,分布在几个文件中,如 setupapi.h、prsht.h、dpa_dsa.h 或 commctrl。 H。 这远远超出了我的能力范围。 看起来微软已经造成了巨大的混乱。 想知道如果 C++ 编程总是这样的话,Visual Studio 是如何编译的。

这里有什么问题? 为什么我不能按照文档中的建议包含该头文件?

有没有另一种方法可以找出sizeof表达式将解析为什么?

这是一个固定版本:

#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,但事实并非如此,不幸的是,该结构是可变长度的。 它是这样定义的:

#define ANYSIZE_ARRAY 1
struct SP_DEVICE_INTERFACE_DETAIL_DATA_W
{
    DWORD  cbSize;
    WCHAR  DevicePath[ ANYSIZE_ARRAY ];
}

长度因数据而异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM