2016-04-04 2 views
3

Я запускаю проект игры C# XNA на Microsoft Visual Studio 2013 с использованием 32-разрядной архитектуры. При попытке загрузить неуправляемую DLL C++ во время выполнения с помощью тега DllImport, я получаю следующую ошибку. Обратите внимание, что эта DLL (fmod_event.dll) происходит от FMOD Ex Programmer’s API, расположенного под/fmoddesignerapi/API/C++ Неуправляемая библиотека DLL при сбое импорта среды C#

Необработанное исключение типа 'System.DllNotFoundException'.
Дополнительная информация: Не удается загрузить DLL «fmod_event»:. Указанный модуль не может быть найден (Исключение из HRESULT: 0x8007007e)

Код последовал и не во время импорта.

[DllImport("fmod_event")] 
private static extern RESULT FMOD_EventSystem_Create(ref IntPtr eventsystem); 

Я добавил dll в корневую директорию проекта и установил его в «Копировать, если новый». Я могу гарантировать, что эта DLL присутствует в папках DEBUG и RELEASE bin в нужном месте.

При импорте «fmodex.dll» доступный через тот же загрузки файла и расположенный под/API/не бегаю в том же номере, и все работает, как ожидается, со следующим кодом:

[DllImport("fmodex")] 
private static extern RESULT FMOD_System_Create(ref IntPtr system); 

Обе эти библиотеки DLL можно увидеть в одной папке bin.
Я попытался использовать fmod_event.dll 32 и 64 без везения.

Может ли кто-нибудь объяснить, почему одна DLL загружается правильно, но не другая? Thanks

+0

Do _any_ импортирует работу для ** fmod_event.dll **? Можете ли вы подтвердить, что эти две библиотеки DLL находятся сразу в папках ** Debug ** или ** Release **? Зачем вам нужно копировать их в дочерние папки? – MickyD

+0

Вы видели этот сайт: http://www.solvusoft.com/en/files/missing-not-found-error/dll/windows/electronic-arts-inc/crysis/fmod-event-dll/ – PaulF

+1

Я склонен а не скачивать DLL из неизвестных источников. – caubry

ответ

1
  • Укажите .DLL как расширение
  • Убедитесь, что файл существует в PATH, или указать полный путь в DllImport
  • Убедитесь, что зависимые модули существуют для этой DLL. Используйте Dependency Walker для поиска зависимых DLL-файлов и загружаемых.
  • проверить 32-разрядную и 64-разрядную версию. Процесс 32-бит не может загрузить 64-разрядную DLL, и наоборот
+0

Это очень странно, но вы его исправили. Я действительно должен был указать .DLL для fmod_event. Но похоже, что на нее не влияет другая DLL. Благодаря :) – caubry

-1

Обычно для всех неуправляемых библиотек DLL требуется регистрация. Если вы получили файл fmod_event.dll, который не входит в установочный пакет, попробуйте запустить regsvr32 для его регистрации.

+0

Не все «неуправляемые DLL-файлы» являются COM-серверами – MickyD

+0

Это неверно, если неуправляемая/родная DLL не является COM, а кто-то использует COM для ее использования. – Ajay

+0

Кроме того, даже если ** regsvr32 ** работал, потому что модуль содержал экспорт 'DllRegisterServer', что означало бы это COM-сервер, и поэтому вам не нужно ** DllImport ** ничего. Вы просто используете COM. Редко модуль содержит кучу экспорта в дополнение к серверу COM – MickyD

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