我带了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 ..
答案 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。保留定义。