usb detection : problème avec la macro DEFINE_GUID?
Bonjour,
Je ne sais pas si je n'aurais pas du poster sur un forum windows mais je me lance...
Je cherche à détecter la connection/deconnection d'un periphe USB mais j'ai un pb de linkage au niveau de la méthode d'enregistrement de la fenêtre qui recevra les évènements usb
Je pense que le problème vient de l'entête initguid.h qui définie la macro DEFINE_GUID mais je sèche completement
Autre chose, si dans l'entête de UsbMonitor, je ne spécifie pas #define WINVER 0x0500, j'obtiens l'erreur suivante:
'DEV_BROADCAST_DEVICEINTERFACE' was not declared in this scope
Et je suis obligé de spécifier 0x0500 qui corespond à win 2000 alors que je devrais mettre 501 pour xp. Mais dans ce dernier cas, j'obtiens:
'InterlockedPopEntrySList' was not declared in this scope
Mon environnement :
Win Xp
Gcc 4.4.1 (tdm)
Qt 4.5.3
Ci-dessous, le code et l'erreur de link
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
bool UsbMonitor::doRegisterForDevNotification(void)
{
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
NotificationFilter.dbcc_size = sizeof(NotificationFilter);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;// = 5;
NotificationFilter.dbcc_reserved = 0;
NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;//GUID_DEVINTERFACE_USBSTOR;//GUID_DEVCLASS_USB;//GUID_DEVINTERFACE_USB_DEVICE;
HDEVNOTIFY hDevNotify = RegisterDeviceNotification(this->winId(), &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE);
if(hDevNotify == NULL)
qDebug() << "Failed to register device notification";
return(NULL != hDevNotify);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
g++ -c -include r:\usbCom\build\.o\debug\precompHeader.h -pg -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DDEBUG -DQT_THREAD_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -I"c:\usr\Qt\4.5.3\include\QtCore" -I"c:\usr\Qt\4.5.3\include\QtGui" -I"c:\usr\Qt\4.5.3\include" -I"." -I"c:\usr\Qt\4.5.3\include\ActiveQt" -I"r:\usbCom\build\.moc\debug" -I"r:\usbCom\build\.ui\debug" -I"c:\usr\Qt\4.5.3\mkspecs\win32-g++" -o r:\usbCom\build\.o\debug\moc_usbMonitor.o r:\usbCom\build\.moc\debug\moc_usbMonitor.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -pg -Wl,-subsystem,console -mthreads -Wl -o bin\debug\dbgusbCom.exe object_script.dbgusbCom.Debug -L"c:\usr\Qt\4.5.3\lib" r:\usbCom\build\.o\debug\debugIco_res.o -lhid -lsetupapi -lQtGuid4 -lQtCored4
r:\usbCom\build\.o\debug\moc_usbMonitor.o:moc_usbMonitor.cpp:(.rdata+0x0): multiple definition of `GUID_DEVINTERFACE_USB_HUB'
r:\usbCom\build\.o\debug\usbMonitor.o:usbMonitor.cpp:(.rdata+0x4): first defined here
r:\usbCom\build\.o\debug\moc_usbMonitor.o:moc_usbMonitor.cpp:(.rdata+0x10): multiple definition of `GUID_DEVINTERFACE_USB_DEVICE'
r:\usbCom\build\.o\debug\usbMonitor.o:usbMonitor.cpp:(.rdata+0x14): first defined here
r:\usbCom\build\.o\debug\moc_usbMonitor.o:moc_usbMonitor.cpp:(.rdata+0x20): multiple definition of `GUID_DEVINTERFACE_USB_HOST_CONTROLLER'
r:\usbCom\build\.o\debug\usbMonitor.o:usbMonitor.cpp:(.rdata+0x24): first defined here
r:\usbCom\build\.o\debug\moc_usbMonitor.o:moc_usbMonitor.cpp:(.rdata+0x30): multiple definition of `GUID_USB_WMI_STD_DATA'
r:\usbCom\build\.o\debug\usbMonitor.o:usbMonitor.cpp:(.rdata+0x34): first defined here
r:\usbCom\build\.o\debug\moc_usbMonitor.o:moc_usbMonitor.cpp:(.rdata+0x40): multiple definition of `GUID_USB_WMI_STD_NOTIFICATION'
r:\usbCom\build\.o\debug\usbMonitor.o:usbMonitor.cpp:(.rdata+0x44): first defined here
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [bin\debug\dbgusbCom.exe] Error 1
mingw32-make.exe[1]: Leaving directory `E:/code/usbCom'
mingw32-make.exe: *** [Debug] Error 2
Process terminated with status 2 (0 minutes, 5 seconds)
0 errors, 0 warnings |