2011-12-27 2 views
5

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

Я сделал серию images, чтобы показать свои шаги. Как вы можете видеть, устройство, которое я разработал, подключено и настроено правильно, но я действительно не думаю, что это имеет какое-либо отношение к проблеме. Внутри файла 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 was unhandled:

Unable to load DLL 'FTChipID.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

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

FTChipID.ChipID.GetNumDevices(ref numDevices); 

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

A reference to ...\FTChipID.dll could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.

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

+0

Вы добавляете .dll как часть ссылки на проект ..? а также вы используете пространство имен этого .dll .. также смотрите в версировании этого .dll .. или GAC, если необходимо, если .dll является .net 2.0 - 3.5 .dll и dll .net 4.0 .dll, также посмотрите в настройках свойств для проекта убедитесь, что это проект 4.0, я также попытаюсь скомпилировать его как проект 3.5, а также посмотреть, какие различия существуют. – MethodMan

+0

Добавьте FTChipID.dll в качестве вывода в свой проект (или скопируйте его в папку bin \ Debug) и повторите попытку. Я думаю, FTChipIDNet.dll является оболочкой для первого. – rene

+0

Положите файл FTChipID.dll в каталог с именем FTChipIDNET.dll. Затем структура должна быть в состоянии найти его. –

ответ

2

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

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

+0

Спасибо. Это, по крайней мере, вызвало другую ошибку. Добавив FTChipID.dll в проект как существующий элемент, VS2010 смог найти его во время работы отладчика. Новая ошибка в комментарии ниже моего OP. – Anthony

+0

Вот ссылка, которая может помочь с новым сообщением об ошибке. http://stackoverflow.com/questions/2023766/an-attempt-was-made-to-load-a-program-with-an-incorrect-format-even-when-the-p – Leons

+0

Спасибо за ссылку. Чтение этой ссылки побудило меня спросить FTDI, если они выпустили 64-битную версию FTChipID.dll. Менее чем за 20 минут я получил ответ! «В настоящее время мы не предлагаем 64-битную версию FTChipID.dll. У нас есть пользователи, которые компилируются для 32-разрядного вывода и говорят, что они хорошо работают на 32- и 64-разрядных системах». Таким образом, похоже, что я должен использовать 32-битную сборку. VS2010 Express не предлагает это как вариант, но я покажу, что это часть. Всем спасибо! – Anthony

0

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

SUGGESTION: Скопировать как в вашем \ Windows \ system32

+0

Ты имеешь в виду, что у него есть GAC оба или скопировать оба ..? просто интересуется вашим ответом. – MethodMan

+3

Файлы приложений редко входят в каталог System32. –

+0

Да, он принадлежит к папке system32, вероятно, потому, что он связан с частью системы драйверов. Пожалуйста, сохраните его в соответствии с оригинальным дизайном драйвера FTDI. C: \ windows \ System32 \ FTChipID.dll Я говорю это потому, что его соседние dll также есть C: \ windows \ System32 \ ftd2xx.dll – hamish

2

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

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

+0

yep спасибо, это и послужило причиной моей проблемы, у меня была отладочная сборка моей программы .net. он работал, когда я перестроил визуальную студию x86 и конфигурацию Release. Это должно быть какая-то проблема с компилятором visual studio. Не проблема с dll, потому что у меня уже был файл FTchip.dll в папке c: \ windows \, ​​и он уже работал ранее. – hamish

Смежные вопросы