Мой проект представляет собой отдельное приложение C ++, которое использует FMOD для воспроизведения звука. Ранее я разработал тот же проект с Visual Studio 2010 без каких-либо проблем, но 2012 дает мне классическую ошибку: «Программа не может запуститься, потому что fmodex.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы исправить эту проблему. » Кажется, что проект загружает другие библиотеки DLL (например, связанные с Direct3d файлы и шейдерный компилятор d3d) просто отлично.
Проблема возникает только при попытке отладки или запуска программы из IDE, а не в том случае, если я копирую исполняемый файл в соответствующий каталог с помощью DLL и запускаю его вручную. Если я удаляю все ссылки на FMOD из программы, отладка и запуск работает нормально. Я удостоверился, что у меня есть правильный рабочий каталог в настройках проекта (кроме того, он прекрасно загружает все остальные файлы в том же каталоге). Я изначально преобразовал проект из Visual Studio 2010, но безуспешно пытался создать новый проект с нуля. Я также использовал все возможные настройки компилятора и компоновщика, и поиск в Google, похоже, тоже не помогает.
Я предполагаю, что проблема как-то связана с новыми приложениями в стиле Metro и способом обработки внешних зависимостей, но я также отключил «Поддержка приложений в стиле Metro». Я начинаю думать, что действительно перепробовал все, что мог, и понятия не имею, что попробовать дальше. Направления для получения дополнительной диагностической информации также будет высоко ценится! Спасибо!
Редактировать: Используемая версия Visual Studio — Visual Studio Ultimate 2012 RC, версия 11.0.50706.0 QRELRC июль 2012 г.
Перейти к свойствам проекта:
Configuration Properties | Debugging | Environment
И добавьте следующий пункт:
PATH=c:\path\where\the\dll-is;$(Path)
Мои симпатии, я живу в аду DLL в последнее время, кажется. Два предложения:
Вы можете управлять IDE из командной строки с помощью devenv
который имеет /useenv
переключатель.
«… Используйте переменные окружения PATH, INCLUDE, LIBPATH и LIB вместо путей IDE для сборок VC ++.
dumpbin /dependents [*.exe] [*.dll]
покажет вам зависимости DLL.
dumpbin /dependents openssl.exe
Microsoft (R) COFF / PE Dumper Версия 10.00.40219.01
Авторское право (C) Microsoft Corporation. Все права защищены.
Дамп файла openssl.exeТип файла: EXECUTABLE IMAGE
Изображение имеет следующие зависимости:
SSLEAY32.dll LIBEAY32.dll WSOCK32.dll MSVCR80.dll KERNEL32.dll Summary 4000 .data 14000 .rdata 1000 .rsrc 33000 .text
Возможно, VS запускает приложение с другим текущим каталогом, чем когда вы запускаете приложение вручную.
VS обычно устанавливает текущий каталог в папку проекта, которая обычно не совпадает с папкой, в которой находятся встроенные двоичные файлы. Когда вы запускаете его вручную, вы, вероятно, запускаете его от последнего, а не от первого.
Если это проблема, то код, который загружает fmodex.dll, должен зависеть от текущего каталога, находящегося в пути поиска DLL, что может привести к большой угрозе безопасности (поиск «Установка DLL» или «Предварительная загрузка DLL») и активно блокируется некоторыми конфигурациями Windows.