Приложение также зависит от ряда DLL (не сборок .Net), которые взаимодействуют с оборудованием. мы используем в нашем приложении. Каждая из этих DLL поставляется в версиях x86 и x64. У нас есть давно написанная утилита для загрузки нужной DLL и сопоставления экспорта с функциями делегирования в классе-оболочке C#. Этот DLLLoader отлично работает для всех пар DLL в нашей системе, кроме одной. Когда я пытаюсь открыть версию x64 этой DLL и сопоставить точки входа, вызов LoadLibraryW в kernel32.dll завершается с ошибкой и возвращает сообщение «%1 не является допустимым приложением Win32».
Я проверил 64-битные библиотеки DLL с помощью dumpbin, и все они утверждают, что являются исполняемыми файлами x64. Поэтому я пошел еще дальше и использовал старый инструмент, которым не пользовался годами. Он называется «Зависимости», и его написал Лукас Дж. (https://github.com/lucasg/Dependologies).
Здесь начинаются странности. Библиотеки DLL поставляются как часть SDK. Я разархивировал файлы SDK в одну папку на своем компьютере. Если я открою DLL x64, используя зависимости из этого каталога, загружается DLL и все ее зависимости:

Однако, когда я копирую DLL и ее зависимости SDK ( Qt6 и libusb DLL) в папку моего проекта, а затем не удается открыть ту же DLL в зависимостях:
[img]https://i.sstatic. net/MSERStpB.png[/img]
По какой-то причине зависимости не могут загрузить libusb из каталога проекта. Я проверил, что две библиотеки DLL libusb идентичны в двоичном виде. Если я нажму на сбойную DLL на этом изображении, мне будет показано:
[img]https://i.sstatic.net /vU7cjyo7.png[/img]
Поэтому я пошел еще дальше и открыл две библиотеки DLL usblib в разделе «Зависимости». Зависимости загружают оба из них нормально, но с одной небольшой особенностью. Когда я загружаю DLL из каталога SDK, «Зависимости» загружают зависимые библиотеки DLL из System32:
[img]https://i.sstatic. net/Cb5wqQFr.png[/img]
Но когда я загружаю DLL из каталога проекта, зависимые файлы загружаются из SysWOW64:

(следует отметить, что это отображение DLL, на которую заявили зависимости он не смог найти на диске)
Почему расположение DLL определяет расположение зависимостей? Я загрузил в эту папку несколько других 64-битных DLL, и все они загружают свои зависимости из System32.
От этого у меня болит мозг.
Подробнее здесь: https://stackoverflow.com/questions/791 ... pendencies