Able
Able

Reputation: 3912

TJvHidDeviceController "DevicePath" always showing "\"

I'm using TJvHidDeviceController class to retrive HID Device information. I have plugged two HID devices, but i'm trying to ge the "DevicePath" of SP_DEVICE_INTERFACE_DETAIL_DATA_A structure always getting the device path as '\'. So Ican't open CreateFile function. Please help me to solve this issue. My OS win7. Thanks All.

Upvotes: 0

Views: 1552

Answers (1)

Ritsaert Hornstra
Ritsaert Hornstra

Reputation: 5111

This is guessing!

The one thing I can think of is:

TJvHidDeviceController calls a Windows API call WITHOUT using an A or W suffix. The structure used is SP_DEVICE_INTERFACE_DETAIL_DATA_A, the ANSI version. Now, if you use Delphi 2009 or higher, the routine will expect SP_DEVICE_INTERFACE_DETAIL_DATA_W. size is the same so everything looks OK. But the strings stored will be USC2 encoded (WideChars) instead of ANSI encoded -> thus after every ANSI character there will be a null byte. TJvHidDeviceController probably converts the character array back to a pascal string using a function like StrPas and hence, you only see the first character.

Check: Set a breakpoint just after the function call that fills the structure and use the CPU window to view the content as a memory dump. If you see ANSI characters every other byte and null bytes in between, you can confirm that the above scenario is the case.

Solution:

  1. Check if the call is using the wide variant and change the structure accordingly.
  2. Check if the call is using the wide variant and use the A variant instead. This is probably the easiest option.

Upvotes: 2

Related Questions