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 не был найден...

Другие вопросы по тегам