未知的类型名称 - MINGW中的“DEV_BROADCAST_DEVICEINTERFACE”

时间:2012-05-18 11:33:02

标签: c winapi service windows-services mingw

我带了this code 以编写服务为例。我在主要功能中进行了一些更改,以这种方式使用命令行参数并删除

#define UNICODE
#define WINVER 0x502 

使用“MINGW”。

我收到以下错误:

usb_detect.c: In function 'ServiceMain':
usb_detect.c:123:16: error: unknown type name 'DEV_BROADCAST_DEVICEINTERFACE'
usb_detect.c:132:41: error: request for member 'dbcc_size' in something not a structure or union
usb_detect.c:132:61: error: 'DEV_BROADCAST_DEVICEINTERFACE' undeclared (first use in this function)
usb_detect.c:132:61: note: each undeclared identifier is reported only once for each function it appears in
usb_detect.c:133:41: error: request for member 'dbcc_devicetype' in something not a structure or union
usb_detect.c:133:60: error: 'DBT_DEVTYP_DEVICEINTERFACE' undeclared (first use in this function)
usb_detect.c:136:117: error: 'DEVICE_NOTIFY_SERVICE_HANDLE' undeclared (first use in this function)
usb_detect.c:136:148: error: 'DEVICE_NOTIFY_ALL_INTERFACE_CLASSES' undeclared (first use in this function)

如果我取消注释unicode和winver没有错误,但命令行参数不起作用.. 我也包括了dbt.h ..

1 个答案:

答案 0 :(得分:2)

DEV_BROADCAST_DEVICEINTERFACE structure仅在Windows XP及更高版本(以及此代码所依赖的其他一些API)上受支持。除非您定位的是Windows版本或更高版本,否则不会在Windows标头中定义它。

为了确保定义它,您需要在包含Windows.h之前在头文件的顶部明确指定Windows的目标版本。

典型的模式看起来像这样:

#include <WinSDKVer.h>
#define _WIN32_WINNT    _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>

您尝试的代码的原始版本具有此行,您删除了该行:

#define WINVER 0x502

明确将目标Windows版本设置为Windows Server 2003(Windows NT v5.2)。删除它意味着您将恢复到最低公分母,这是XP之前的Windows版本,其中未定义DEV_BROADCAST_DEVICEINTERFACE结构。

还不清楚为什么要删除UNICODE定义。这是2012年 - 您正在构建的任何应用都应该针对Unicode。保留定义。