TJvHidDeviceController "DevicePath" всегда показывает "\" - PullRequest
0 голосов
/ 09 февраля 2011

Я использую класс TJvHidDeviceController для получения информации об устройстве HID.Я подключил два устройства HID, но я пытаюсь получить «DevicePath» структуры SP_DEVICE_INTERFACE_DETAIL_DATA_A, всегда получая путь устройства как '\'Поэтому я не могу открыть функцию CreateFile.Пожалуйста, помогите мне решить эту проблему.Моя ОС win7.Спасибо всем.

1 Ответ

2 голосов
/ 09 февраля 2011

Это догадка!

Единственное, о чем я могу подумать:

TJvHidDeviceController вызывает вызов Windows API БЕЗ, используя суффикс A или W.Используемая структура: SP_DEVICE_INTERFACE_DETAIL_DATA_A, версия ANSI.Теперь, если вы используете Delphi 2009 или выше, подпрограмма будет ожидать SP_DEVICE_INTERFACE_DETAIL_DATA_W.Размер такой же, так что все выглядит хорошо.Но сохраненные строки будут кодироваться в формате USC2 (WideChars), а не в кодировке ANSI ->, поэтому после каждого символа ANSI будет нулевой байт.TJvHidDeviceController, вероятно, преобразует массив символов обратно в строку паскаля, используя функцию, подобную StrPas, и, следовательно, вы видите только первый символ.

Проверка: установите точку останова сразу после вызова функции, которая заполняет структуру, и используйте окно ЦП для просмотра содержимого в виде дампа памяти.Если вы видите символы ANSI через каждые другие байты и нулевые байты между ними, вы можете подтвердить, что приведенный выше сценарий имеет место.

Решение:

  1. Проверьте, использует ли вызов широкийвариант и измените структуру соответственно.
  2. Проверьте, использует ли вызов широкий вариант, и используйте вместо него вариант А.Это, наверное, самый простой вариант.
...