2009-06-04 3 views
1

У меня была 32-разрядная dll, написанная с использованием Native C, когда я попытался скомпилировать VC++ (VS2008) для преобразования dll в x64, изменив скомпилированную платформу. Но когда я попытался получить доступ к dll из моего приложения C#, которое также является платформой «x64», он не может загрузить DLL. Я использовал Dllimport для связывания dll с моим приложением.Указанный модуль не найден - 64-разрядная dll

Операционная система, используемая в Vista, но я не смог вызвать функцию dll из своего приложения, она говорит, что не удалось загрузить DLL.

Есть ли способ решить эту проблему.

Ждем вас от вашей помощи.

С уважением, Ga

+0

Возможно, потребуется немного больше информации: вы работаете на 64-битной Vista? Вы можете использовать 32-битную dll из своего приложения C#? –

+0

Если вы используете это на 64-битной ОС, дважды проверьте, что вы не установили тип процессора на x86 на вкладке «Сборка». (Может быть, если вы использовали 32-битную DLL и 64-битную ОС до этого) –

+0

Я проверил только его x64. –

ответ

0

попробуйте инструмент «зависимый ходок» (ldd-like tool for win, www.dependencywalker.com), чтобы узнать, какие ссылки против чего. может быть полезно.

+0

Вы также можете использовать «dumpbin/DEPENDENTS MyModule.dll» в командной строке Visual Studio для просмотра зависимостей. В моем случае это был VCRuntime140.dll, который отсутствовал. – Michael

0

Мое предположение было бы зависимостей, ваша новая DLL может иметь некоторые отсутствующие 64-разрядные DLL файлы, которые ему нужно.

+0

, когда я проверил, используя хост зависимостей, он не показывает никакой зависимости для этой DLL. Поэтому я не мог догадаться, в чем проблема. –

+0

какой код ошибки вы получаете, когда он не загружается? Попробуйте в качестве эксперимента написать небольшую программу C++ x64 для загрузки DLL, чтобы увидеть, работает ли это только для того, чтобы увидеть, есть ли проблема в DLL или какой-либо проблеме .NET. –

0

Проверьте, где вы строите разные версии (x86/x64) dll to.

Простейшая задача - установить целевой каталог для 64-разрядной библиотеки DLL в качестве «x64» подкаталога вашей целевой папки. В конфигурации вашего 64-битного решения установите целевой каталог C# также в качестве каталога «x64».

Это гарантирует, что exe для каждой платформы попытается загрузить правильную DLL.

0

Благодарим за помощь.

Когда я поместил dll в C: \ Windows \ System32 \, ошибка была устранена.

Спасибо, Ga

+1

Так вы должны отметить это как ответ? – kbyrd

-1

У меня была проблема с этим один раз вдоль этих линий. У меня была C++ DLL, которая выступала в качестве интерфейса для части оборудования, которую мне нужно было вызвать из C#. Тем не менее, это вызовет вызов DllImport, если часть аппаратного обеспечения не была подключена. Это связано с тем, что функция инициализации DLL возвращала сбой, поэтому C# просто сказал, что не может загрузить DLL, возможно, это не связано с тем, DLL.

Убедитесь, что вы не вызываете какую-либо ошибку при настройке DLL в своем коде на C.

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