DllNotFoundException, но DLL есть
Поэтому я использую SDK для аппаратного генератора случайных чисел, который предоставляет dll под названием PsyREG.dll для взаимодействия с ним, а также некоторый источник C# для использования методов из dll.
Это работало в прошлом, но почему-то перестало работать. Мои руки немного связаны, так как на данный момент у меня нет доступа к соответствующему устройству, поэтому я не могу попробовать много вещей...
Однако вот странная вещь. DLL там, там же, где всегда. На самом деле File.Exists("PsyREG.dll") возвращает значение true, и я дважды проверил, и это точно так же, как его обеспечивает исходный источник C#, например [DllImport("PsyREG.dll")].
Есть идеи?
5 ответов
Вероятно, у этой библиотеки есть некоторые зависимости, которые они не зарегистрированы или не находятся в той же папке вашего приложения.
Откройте DLL на проблемной системе в http://www.dependencywalker.com/
Я столкнулся с этой проблемой и решил следующее:
Существует зависимость от msvcr90.dll, если вы компилируете в /MD. Попробуйте вместо этого скомпилировать код с /MT.
Project properties
> C/C++
> Code Generation
> Runtime Library: /MT
Возможно, вам следует проверить, ожидаете ли вы конкретной версии продукта dll, и убедиться, что версии продукта по-прежнему совпадают правильно.
Я имел дело с тем же исключением в отношении одной из моих библиотек DLL (давайте назовем это A
). C# был сбой, потому что он утверждал, что не может найти эту DLL (A
) (пока он там находился в той же папке, что и исполняемый файл).
Оказалось, что проблема была вызвана A
зависимость от другой DLL (назовите ее B
). B
не был в пути, так A
не мог загрузить это, когда это нуждалось в этом. поскольку B
нужна целая куча других DLL, решение было добавить B
каталог к PATH
переменная окружения.
Интересно, как вылетает C# с ошибкой, говорящей, что A
не найден, когда на самом деле B
не был найден...