![](/img/trans.png)
[英]Trying to use Windows Setupapi.h functions to obtain an error code shown in device properties
[英]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.