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

Я пытаюсь скомпилировать пример проекта, показанного здесь для 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.

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

Ответы [ 3 ]

2 голосов
/ 27 декабря 2011

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

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

2 голосов
/ 03 октября 2014

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

Сборка - Configuration Manager Платформа активных решений - "x86" Примечание. Если «x86» недоступен, выберите «-New ...» для выбора «x86».

0 голосов
/ 27 декабря 2011

Звучит так, как будто несколько .dll: и FTChipIDNet.dll (тот, к которому вы подключаетесь), и FTChipID.dll (тот, который имеет реальную, не COM, не .Net функциональность).Вам нужны оба.

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

...