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

Мой проект представляет собой отдельное приложение 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 г.

10

Решение

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

Configuration Properties | Debugging | Environment

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

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

Другие решения

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

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

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

  2. 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
2

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

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

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

0
По вопросам рекламы [email protected]