Где разместить неуправляемую 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/debug и bin/release. Я даже пытался скопировать его в system32, но ничего не работает.

Любые идеи?


person Tom Wright    schedule 21.06.2010    source источник


Ответы (4)


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

person CesarGon    schedule 21.06.2010
comment
Отличная идея. Как мне это проверить? - person Tom Wright; 21.06.2010
comment
DependencyWalker — отличный инструмент, который подскажет, какие другие модули (DLL, драйверы и т. д.) вам нужны для загрузки данной DLL. Получите его здесь: dependencywalker.com - person CesarGon; 21.06.2010

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

[DllImport(@"MyCoolDll.dll")]

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

Обновить

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

person jsmith    schedule 21.06.2010
comment
К сожалению, это не помогло. Кроме того, код, предоставленный поставщиком, работает без расширения. - person Tom Wright; 21.06.2010
comment
@ Том, если код от поставщика работает, зачем вам спрашивать об этом при переполнении стека? Учебник не должен быть точным, возможно, проблема с самой dll? - person jsmith; 21.06.2010
comment
Думаю, это не учебник, а скорее тестовое приложение для проверки целостности. Я задаю вопрос, потому что мое дословное копирование не сработало. И все же спасибо за ссылку. - person Tom Wright; 21.06.2010

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

[DllImport(@"MyCoolDll.dll")]

Я обычно храню эти dll локально вместе с бинарными файлами программы (например, в bin\Debug для разработки)

person Grzenio    schedule 21.06.2010

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

person Alan    schedule 17.06.2013