Зависимость DLL не найдена при отладке с помощью Visual Studio 11 RC

Мой проект - автономное приложение на С++, которое использует FMOD для воспроизведения звука. Я ранее разработал тот же проект с Visual Studio 2010 без каких-либо проблем, но 2012 дает мне классическую ошибку: "Программа не может запускаться, потому что fmodex.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы исправить эту проблему." Похоже, что проект загружает другие DLL (такие как связанные с Direct3d файлы и компилятор d3d shader).

Проблема возникает только при попытке отладки или запуска программы из среды IDE, а не при копировании исполняемого файла в соответствующий каталог с DLL и его запуск вручную. Если я удалю все ссылки на FMOD из программы, отладка и работа прекратятся. Я убедился, что у меня есть правильный рабочий каталог в настройках проекта (кроме того, он загружает все остальные файлы в одном каталоге). Первоначально я преобразовал проект из Visual Studio 2010, но попытался создать новый проект с нуля без везения. Я также использовал все возможные настройки компилятора и компоновщика, а googling тоже не помогает.

Я предполагаю, что проблема имеет какое-то отношение к новым приложениям в стиле Metro, и это способ справиться с внешними зависимостями, но я также отключил поддержку Metro App App. Я начинаю думать, что я действительно пробовал все, что могу, и понятия не имею, что попробовать дальше. Направления получения более подробной информации о диагнозе будут также высоко оценены! Спасибо!

Изменить: Версия Visual Studio, которую я использую, - это Visual Studio Ultimate 2012 RC, версия 11.0.50706.0 QRELRC Июль 2012 г.

Ответ 1

Перейдите к свойствам проекта:

Configuration Properties | Debugging | Environment 

И добавьте следующий элемент:

PATH=c:\path\where\the\dll-is;$(Path)

Ответ 2

Мои симпатии, я в последнее время живу в DLL-аде. Два предложения:

  • Вы можете управлять IDE из командной строки с помощью devenv, у которого есть переключатель /useenv.

    "... Используйте переменные окружения PATH, INCLUDE, LIBPATH и LIB вместо путей IDE для сборки VС++.

  • dumpbin /dependents [*.exe] [*.dll] покажет вам зависимости от DLL.

    dumpbin /dependents openssl.exe

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Авторское право (C) Корпорация Microsoft. Все права защищены. Дамп файла openssl.exe

Тип файла: ИСПОЛНИТЕЛЬНОЕ ИЗОБРАЖЕНИЕ

Изображение имеет следующие зависимости:

SSLEAY32.dll
LIBEAY32.dll
WSOCK32.dll
MSVCR80.dll
KERNEL32.dll

Summary

     4000 .data
    14000 .rdata
     1000 .rsrc
    33000 .text 

Ответ 3

Возможно, VS запускает приложение с другим текущим каталогом, когда вы запускаете приложение вручную.

VS обычно устанавливает текущий каталог в папку проекта, которая обычно не совпадает с папкой, в которой находятся встроенные двоичные файлы. Когда вы запускаете его вручную, вы, вероятно, запускаете его из последнего, а не из первого.

Если это проблема, тогда код, загружающий файл fmodex.dll, должен быть в зависимости от текущего каталога в пути поиска DLL, что может привести к большому риску безопасности (поиск "установки DLL" или "дозагрузка DLL" ) и который активно блокируется некоторыми конфигурациями Windows.