2010-06-21 2 views
1

Это должен быть действительно глупый вопрос, но я все еще очень зеленый, когда дело доходит до C#.Где разместить неуправляемую DLL для импорта в C#?

Во всяком случае, у меня есть DLL, и я импортировать его с линией, как это:

[DllImport(@"MyCoolDll")] 

Я поднял это прямо из демонстрационного приложения, предоставленного продавцом, но держать жалуясь что он не может найти DLL. Фактическая ошибка (из Visual Studio 2010), как это:

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

Я попытался поместить скомпилированные DLL в бен/отладки и папки bin/выпуска. Я даже пытался копировать его в system32, но ничего не работает.

Любые идеи?

ответ

4

У вашей библиотеки DLL могут быть зависимости, которые также необходимо загрузить. Вы проверили это?

+0

Хорошая идея. Как я могу это проверить? –

+0

DependencyWalker - отличный инструмент, который расскажет вам, какие другие модули (DLL, драйверы и т. Д.) Вам нужны для загрузки данной DLL. Получите его здесь: http://www.dependencywalker.com/ – CesarGon

+0

Спасибо, что сделал трюк. –

3

Я знаю, что вы должны дать полное имя файла. Таким образом,

[DllImport(@"MyCoolDll.dll")] 

Он должен работать из папок bin \ debug или bin \ release.

Update

This, где я узнал, как импортировать неуправляемые библиотеки DLL. Если это тестовое приложение работает правильно, проверьте папку bin \ debug, чтобы узнать, что отличается от вашего. Возможно, ссылка на дополнительную dll? Также проверьте все ссылки в приложении примера, чтобы убедиться, что вы их не пропустили.

+0

К сожалению, это не помогло. Кроме того, код, поставляемый поставщиком, работает без расширения. –

+0

@ Если вы используете код от поставщика, почему вы спрашиваете об этом при переполнении стека? Учебник не должен быть точно точным, возможно, проблема с самой dll? – jsmith

+0

Это не учебник, а больше тестового приложения, чтобы проверить целостность, я думаю. Я задаю вопрос, потому что мое вербальное копирование не работает. И все же спасибо за ссылку. –

0

Насколько я знаю, вы должны обеспечить расширение:

[DllImport(@"MyCoolDll.dll")] 

Я обычно держу эти библиотеки DLL локально программы двоичных файлов (так в Bin \ Debug для развития)

0

Ключ для меня было чтобы просмотреть пути, перечисленные в выводе консоли Visual Studio Build, чтобы узнать, где были размещены двоичные файлы. Как только я обнаружил это, я знал, где копировать неуправляемую DLL, и исправлена ​​ошибка «Невозможно загрузить DLL».

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