Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка выполнения C # DLL - строится, запускается, но выдает необработанное исключение при попытке использовать функции DLL

Автор вопроса: AnthonyОтветов: 3

Я пытаюсь скомпилировать пример проекта, показанный здесь для C #. Его нужно было преобразовать в VS2010, но это сработало. Он строится, запускается, но затем умирает, когда пытается получить доступ к функции DLL.

Я сделал серию изображений, чтобы показать свои шаги. Как видите, устройство, которое я разработал, подключено и правильно настроено, но я действительно не думаю, что это имеет какое-либо отношение к проблеме. Следующий комментарий внутри файла Form1.cs объясняет, как использовать DLL:

/*
PLEASE NOTE
You must add a reference to the FTChipIDNet.dll in order to use this sample
To do this:
1. Click on Solution explorer tab.
2. Right click the References tree.
3. Choose Add Reference option.
4. Browse to the FTChipIDNet.dll (as a personal preference I place this in my bin directory)
5. Click OK
*/

Я выполнил приведенные выше инструкции, и неопределенная ссылка на пространство имен FTChipID была исправлена. Я также вручную проверил обозреватель объектов, чтобы убедиться, что функция GetNumDevices существует, и она есть.

Нажатие на кнопку вызывает эту ошибку:

DLLNotFoundException не было обработано:

Невозможно загрузить DLL "FTChipID.dll": указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

в этой строке кода:

FTChipID.ChipID.GetNumDevices(ref numDevices);

Теперь вы можете подумать, что ошибка говорит о том, что ей нужен FTChipID.dll, а не FTChipIDNet.dll. Мне интересно то же самое. У меня есть FTChipID.dll вместе с файлами .lib и .h, но я не знаю, как их использовать и где они должны быть, чтобы эта программа могла их найти. Я попытался добавить ссылку на FTChipID.dll, но VS2010 сказал

Не удалось добавить ссылку на ... \ FTChipID.dll. Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM.

Я тоже не знаю, что это значит. Любые идеи? Заранее спасибо.

  • вы добавляете .dll как часть ссылки на проект ..? Кроме того, вы используете пространство имен этой .dll .. также изучите версию этой .dll .. или GAC, если необходимо, если .dll - это .net 2.0 - 3.5 .dll по сравнению с .net 4.0 .dll, также посмотрите в настройках свойств для проекта убедитесь, что это проект 4.0. Я бы также попытался скомпилировать его как проект 3.5, чтобы увидеть, в чем различия. MethodMan 27.12.2011
  • Добавьте FTChipID.dll в качестве вывода в свой проект (или скопируйте его в папку bin \ Debug) и повторите попытку. Я предполагаю, что FTChipIDNet.dll - это оболочка для первого. rene 27.12.2011
  • Поместите FTChipID.dll в тот же каталог, что и FTChipIDNET.dll. Фреймворк должен тогда найти его. M.Babcock 27.12.2011
  • Добавьте DLL в свой проект с помощью Project + Add Existing Item. Установите для свойства Копировать в выходной каталог значение Копировать, если оно новее. Hans Passant 27.12.2011
  • Я скопировал FTChipID.dll в папку bin \ Debug. Это вызывает странное поведение. Запуск отладчика внутри VS делает то же самое - он не может найти FTChipID.dll. Однако запуск исполняемого файла вне VS2010 в папке bin \ Debug вызывает новую ошибку. Была сделана попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B). Anthony 27.12.2011
  • Ах да, я забыл сказать, что переход на фреймворк версии 3, 3.5 и 4 не повлиял на поведение до и после добавления FTChipID.dll в проект и папку bin \ Debug. Anthony 27.12.2011

runtimedll

Ответы

Ответ 1 · рейтинг 2 · Leons

FTChipIDNet.dll - это оболочка для FTChipID.dll, поэтому вам нужно добавить ссылку на ваше решение (как вы это делали выше), а затем скопировать FTChipID.dll в папку bin, где будет находиться FTChipIDNet.dll.

Обе библиотеки DLL должны находиться в папке bin вашего решения для работы и не должны располагаться в windows \ system32.

Ответ 2 · рейтинг 2 · Lawrence Miller

Я создал образец программы FTDI "CSChipID" в VS2013, используя сборку "Any CPU". Два файла DLL "FTChipID.dll" и "FTChipIDNet.dll" были скопированы в каталог bin, но я продолжал получать ошибки при вызове первой функции DLL, "FTChipID.ChipID.GetNumDevices (ref numDevices);" Исправление заключается в изменении сборки на "x86" следующим образом.

Сборка - Configuration Manager Active Solution Platform - "x86" Примечание. Если "x86" недоступен, выберите -New ...-, чтобы выбрать "x86".

Ответ 3 · paulsm4

Похоже, существует несколько .dll: как FTChipIDNet.dll (тот, с которым вы взаимодействуете), так и FTChipID.dll (тот, который имеет фактическую функциональность, не COM, не .NET). Вам нужно и то, и другое.

ПРЕДЛОЖЕНИЕ: Скопируйте оба файла в каталог \ windows \ system32.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы