Microsoft Visual Studio: как найти, откуда загружается dll? - PullRequest
1 голос
/ 21 июня 2011

Неправильная версия dll (MSVCR90d.dll вместо MSVCR90.dll) используется для оператора удаления, вызывая сбой. В стеке вызовов отображается только имя DLL, а не их путь. Как увидеть путь?

Редактировать: я строю в режиме выпуска, а не в режиме отладки. Так почему же используется отладочная DLL? Я видел ту же проблему, о которой сообщалось на многих других сайтах, но не смог найти работающего решения. Вчера я обнаружил, используя Dependency Walker, что отладочная dll забирается, поэтому я переименовал dll, затем релизная версия была подхвачена в Dependency Walker, и моя программа также не вылетала. Сегодня я ничего не изменил, но программа снова начала зависать. И когда я вижу дерево обхода зависимостей, оно показывает MSVCR90d.dll (dll отладки) со знаком вопроса, говоря, что не может найти его в пути. Почему он не может забрать релиз DLL? Также я не знаю, откуда dll отладки используется во время выполнения.

Ответы [ 3 ]

1 голос
/ 21 июня 2011
  1. Вы можете добавить их в глобальную переменную среды PATH. См. Здесь
  2. . Вы можете указать dll вручную, щелкнув правой кнопкой мыши по решению и выбрав Add Reference, а затем перейдите к конкретной dll.
  3. Вы можете добавить путь кDLL-файлы к настройкам исполняемых файлов в разделе Инструменты> Параметры> Проекты и решения> Каталоги VC ++
0 голосов
/ 21 июня 2011

Вам не нужно знать путь Dll, вам нужно понять, почему вызывается отладочная версия оператора удаленияВозможно, константа _DEBUG определена в конфигурации выпуска.

0 голосов
/ 21 июня 2011

Для выяснения подробностей о dll, вы можете использовать DependencyWalker

Однако, в вашем случае я думаю, что d добавляется к имени dllВозможно, потому что вы создаете DEBUG сборку, и для этого загружаются соответствующие DEBUG версии всех dlls.

Если вы решите создать сборку RELEASE, вы не добавите d к MSVCR90.dll

...