2011-02-09 1 views
0

J'utilise la classe TJvHidDeviceController pour récupérer les informations du périphérique HID. J'ai branché deux dispositifs HID, mais j'essaye de ge le "DevicePath" de la structure SP_DEVICE_INTERFACE_DETAIL_DATA_A obtenant toujours le chemin de dispositif comme '\'. Donc, je ne peux pas ouvrir la fonction CreateFile. S'il vous plaît aidez-moi à résoudre ce problème. Mon OS win7. Merci à tous.TJvHidDeviceController "DevicePath" affichant toujours ""

+1

Si vous exécutez votre application avec tous les droits d'administrateur, le problème persiste-t-il? Avez-vous utilisé une version plus récente de Delphi où Char est égal à WideChar au lieu de AnsiChar? –

+0

Quelle version de Delphi? Quelle version de Windows? –

+0

@Jeroen: Dans une autre question utilisateur602714 a déclaré: http://stackoverflow.com/questions/4895179/how-to-programmatically-change-tablet-pc-orientation (J'utilise Delphi 2010) –

Répondre

2

Ceci est une estimation!

La seule chose que je peux penser est:

TJvHidDeviceController appelle un appel API Windows sans l'aide d'un A ou un suffixe W. La structure utilisée est SP_DEVICE_INTERFACE_DETAIL_DATA_A, la version ANSI. Maintenant, si vous utilisez Delphi 2009 ou supérieur, la routine attend SP_DEVICE_INTERFACE_DETAIL_DATA_W. la taille est la même, donc tout a l'air OK. Mais les chaînes stockées seront codées en USC2 (WideChars) au lieu de codées ANSI -> après chaque caractère ANSI, il y aura un octet nul. TJvHidDeviceController convertit probablement le tableau de caractères en une chaîne pascal en utilisant une fonction comme StrPas et par conséquent, vous ne voyez que le premier caractère.

Vérification: Définissez un point d'arrêt juste après l'appel de fonction qui remplit la structure et utilisez la fenêtre de la CPU pour afficher le contenu en tant que vidage de la mémoire. Si vous voyez des caractères ANSI tous les autres octets et octets nuls entre, vous pouvez confirmer que le scénario ci-dessus est le cas.

Solution:

  1. Vérifiez si l'appel utilise la variante large et changer la structure en conséquence.
  2. Vérifiez si l'appel utilise la variante large et utilisez plutôt la variante A. C'est probablement l'option la plus facile.
+0

Ce n'est pas seulement deviner. Il n'a pas dit s'il utilise Unicode Delphi (2009+) ou une ancienne version Ansi Delphi. –

+0

@Warren: c'est juste une partie de la conjecture ;-). –

+0

Bonjour à tous, Oui, j'utilise Delphi2010. J'ai changé le suffixe "A" en "W". maintenant ça marche bien. Obtenir maintenant toutes les informations sur le périphérique HID. Merci beaucoup. Cela m'aide beaucoup. Encore merci...:) –