Что делать с «Это приложение не удалось запустить, потому что myproject.dll не был найден.» ошибка - PullRequest
0 голосов
/ 13 июля 2010

У меня есть проект A, связанный с проектом B. B скомпилирован в .dll, а A является основной программой и скомпилирован в .exe

Компиляция проектов выполняется без каких-либо проблем,но когда я запускаю программу, я получаю всплывающее окно с сообщением «Это приложение не запустилось, потому что B.dll не было найдено. Повторная установка приложения может решить проблему».

Я сделалнесколько чисток, пытался переместить dll, но это не сработает.

Я использую Visual Studio 9.0 кстати

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

Когда Windows загружает EXE, она проверяет, какие DLL нужны, прямо или косвенно. В вашем случае A.EXE понадобится B.dll. Когда Windows определит этот список, она будет использовать эту процедуру , чтобы найти библиотеки DLL:

  • Каталог, в котором хранится исполняемый файл [1]
  • Текущий каталог, установленный CreateProcess ()
  • Системный каталог Windows (содержит большинство библиотек Windows, таких как USER32.DLL)
  • Каталог Windows (в основном по старым причинам)
  • Каталоги из переменной PATH (также по устаревшим причинам)

[1] Символьные ссылки могут привести к тому, что исполняемый файл будет иметь несколько путей. Чтобы быть точным здесь, это путь исполняемого файла, который был передан в CreateProcess.

1 голос
/ 13 июля 2010

Как уже упоминалось, Dll должен находиться в том же каталоге, что и .exe, или доступной переменной среды PATH.Dll также можно найти, если она находится в текущем каталоге, каталоге Windows или System32.

Имея два разных проекта, вы можете добавить шаг после сборки в проект Dll, скопировав Dll в каталог .exe.Удобно держать Dll end exe в том же решении.По умолчанию выходной каталог $ (SolutionDir) $ (ConfigurationName), это означает, что все файлы .exe и .dll в решении записываются в один и тот же каталог.В этом случае проблема с загрузкой dll решается автоматически.

1 голос
/ 13 июля 2010

DLL должна находиться в пути или в том же каталоге, что и исполняемый файл A.

Тогда существует вероятность, что DLL B каким-то образом не является действительной DLL

...