WinUSB с C Builder 10.3 community edition

#c #windows-10 #c builder #winusb #c builder-10.3-rio

#c #windows-10 #c Builder #winusb #c builder-10.3-rio

Вопрос:

Кто-нибудь успешно использовал winusb.h с C Builder 10.3 Community Edition от Embarcadero?

Недавно я скачал 10.3 это с целью обновления приложения для настольных компьютеров / ноутбуков, которое я написал несколько лет назад для Windows XP (используя Borland C Builder 6), которое использует функции WinUSB для управления (по одной за раз) тремя машинами.

Попытка запустить исполняемый файл в Windows 10 приводит к сбоям защиты при доступе к USB-устройству — он отлично работает в XP и Windows 7.

USB-устройство было обновлено для автоматического распознавания Windows 10 (спасибо, П. Батард), и, используя пример Microsoft в Как получить доступ к USB-устройству с помощью функций WinUSB, я уверен, что с устройством нет проблем — оно загружается, и я могу запросить дескрипторы, используя вызовы функций WinUSB, закодированные из среды Visual Studio на компьютере с Windows 10.

Вернемся к C Builder 10.3 Community Edition от Embarcadero — я могу написать приложение, которое будет реагировать на нажатия кнопок (скомпилировать, связать и выполнить нормально), но когда я включаю любую из функций из winusb.h , я получаю ошибки:

[ошибка ilink32] Ошибка: неразрешенная внешняя ‘WinUsb_(функция)’, на которую ссылается (отредактированный путь) UNITx.OBJ

Обычно я бы воспринял это как означающее, что мне не удалось включить требуемый заголовок, или путь к этому заголовку (или библиотеке) не может быть разрешен, но я почти уверен, что это не так — заголовок определенно «включен», и я отредактировал путь IDE, чтобы явно включить каталоги winusb.h и winusb.lib файлов — они «похоронены» довольно глубоко, но определенно присутствуют. Я даже пытался скопировать оба файла в каталог проекта, но безрезультатно.

Я искал на сайте сообщества Embarcadero, но не могу найти ссылки на ‘winusb’.

Я понимаю, что это гораздо более сложная среда, чем у C Builder 6, и что я вполне могу чего-то не хватать, но я не могу избавиться от ощущения, что что-то в IDE работает не так, как должно — ссылка на другие заголовки в порядке.

Идеи, кто-нибудь, пожалуйста?

Ответ №1:

Недостаточно просто указать IDE на папку, содержащую Winusb.lib , вы должны фактически добавить этот .lib файл в свой проект на C или явно ссылаться на него в своем коде на C с помощью #pragma comment(lib, "Winusb.lib") инструкции, иначе .lib файл не будет передан компоновщику для разрешения ваших вызовов функций WinUSB.

Кстати, этот дополнительный шаг также требовался для большинства .lib файлов в C Builder 6.

Комментарии:

1. Получилось! Спасибо @Remy Lebeau … Еще раз (февраль-март 2016). Мне никогда раньше не приходилось делать этого с чем-то, что является «частью пакета» — возможно, мне просто повезло. В BCB 6 (и Win XP) winusb не был «родным», поэтому мне пришлось добавить его в качестве импорта DLL. Хорошая правка (выше) — еще раз спасибо.. должен разобраться с форматированием!