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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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