2012-05-18 2 views
2

Я принял this code как пример, чтобы написать услугу. И я сделал некоторые изменения в моей основной функции таким образом, чтобы работать с параметрами командной строки и удалитьНеизвестный тип - DEV_BROADCAST_DEVICEINTERFACE в MINGW

#define UNICODE 
#define WINVER 0x502 

Am с помощью «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) 

Если я раскомментировать юникод и не WinVer там нет ошибок, но параметры командной строки не работают .. я включил dbt.h тоже ..

ответ

2

DEV_BROADCAST_DEVICEINTERFACE structure поддерживается только в Windows XP и более поздних версиях (а также в некоторых других API, на которые опирается этот код). Он не будет определен в заголовках Windows, если вы не настроите таргетинг на эту версию Windows или более позднюю.

Чтобы убедиться, что он определен, вам необходимо явно указать целевую версию Windows в верхней части вашего файла заголовка до, включая Windows.h.

Типичная картина выглядит примерно так:

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

оригинальный вариант кода вы пробовали была эта линия, которую вы удалили:

#define WINVER 0x502 

Это явно установить цель Версия Windows для Windows Server 2003 (Windows NT v5.2). Удаление означает, что вы вернетесь к самому низкому общему знаменателю, который является версией Windows до XP, где структура DEV_BROADCAST_DEVICEINTERFACE не определена.

Непонятно также, почему вы удаляете определение UNICODE. Это 2012 год - любое приложение, которое вы создаете, должно быть нацелено на Unicode. Оставьте это также определенным.

+0

спасибо .... за win7 мне нужно определить отдельный winver? или есть другое общее определение, доступное для всех версий из xp. – 2vision2

+0

, но если я определяю unicode, я не могу использовать параметры командной строки в главном ... может быть звучит глупо, извините, новичок в этом ... – 2vision2

+0

Если я определяю UNICODE, то параметры моей командной строки не работают !!!!! – 2vision2