#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. Хорошая правка (выше) — еще раз спасибо.. должен разобраться с форматированием!