Почему моя программа не может найти свои библиотеки DLL в Vista 64? - PullRequest
10 голосов
/ 29 января 2009

Я недавно получил новый ноутбук. К сожалению, это пришло с Vista. Было очень сложно заставить его работать, и у компа есть аппаратные компоненты, для которых нет драйверов XP, поэтому я не могу «перейти» на ОС, которая действительно работает. В основном у меня все работает, но одна странная проблема меня озадачила.

Я установил Delphi и попытался построить проект. Он скомпилирован, но не запустится. "Не удалось запустить данное приложение, так как не найден файл sdl.dll." Справедливо. Поэтому я схватил SDL.dll и положил в папку C:\windows\system32. (В Vista используется 64-битная версия Home Premium. Однако это 32-битная библиотека DLL, поэтому я поместил ее в папку 32 вместо 64).

Хит Беги снова. Та же проблема. Но почему? Вот куда это идет, верно? И C:\windows\system32 находится в системном пути. Кто-нибудь знает, почему он не может ссылаться на DLL?

(И да, я знаю, что могу обойти проблему, поместив DLL в ту же папку, что и .exe. В настоящее время я делаю это в качестве обходного пути. Хотя в долгосрочной перспективе это плохая идея, потому что у меня есть несколько разных проектов, которые требуют SDL.)

Ответы [ 2 ]

28 голосов
/ 29 января 2009

Это не проблема Vista, а проблема 64-битной Windows: имя System32 действительно сбивает с толку, но в действительности это папка, в которой находятся системные (64-битные) библиотеки DLL.

Так что на любой 64-битной версии Windows ...

... все 64-битные системные DLL находятся в C: \ Windows \ System32 .

... все 32-битные системные DLL находятся в C: \ Windows \ SysWOW64 .

Название происходит от Ш индов о н Ш индов 64 ( WOW64 ), который является имя уровня перевода, позволяющего 32-битным приложениям использовать собственные 64-битные системные ресурсы.

8 голосов
/ 29 января 2009

Раймонд Чен недавно обратился к основной причине, по которой 32-битные системные каталоги странны в 64-битной Windows . Первый абзац записи действительно является ключом к пониманию причины разделения 32-битных каталогов:

В 64-битной Windows запускаются 32-битные программы в слое эмуляции ... Если 32-битный программа пытается посмотреть на систему, он увидит 32-битную систему.

Я думаю, вам нужно иметь отдельные каталоги, чтобы все эти вещи были отдельными и работающими. На первый взгляд нелогичное имя SysWOW64 для каталога, в котором находятся файлы, имеет больше смысла, если учесть, что WOW64 означает Windows В 64-битной Windows, именно так называется упомянутый выше эмулятор.

...