我最近买了一台新笔记本电脑。不幸的是,它带有Vista。让它工作是一个很大的麻烦,并且comp有没有XP驱动程序的硬件组件,所以我不能“升级”到实际工作的操作系统。我大部分时间都在努力工作,但有一个特别奇怪的问题让我难过。
我安装了Delphi并尝试构建一个项目。它已编译,但不会运行。 “此应用程序无法启动,因为找不到sdl.dll。”很公平。所以我抓住SDL.dll并将其放在C:\windows\system32
文件夹中。 (使用Vista 64位家庭高级版。这是一个32位的dll,所以我把它放在32个文件夹而不是64个。)
再次点击运行。同样的问题。但为什么?它就在哪里,对吗? C:\windows\system32
位于系统路径中。任何人都知道为什么它无法链接到DLL?
(是的,我知道我可以通过将DLL放在与.exe相同的文件夹中来解决这个问题。我目前正在这样做作为一种解决方法。但从长远来看,这是一个坏主意,但是,因为我有一些不同的项目都需要SDL。)
答案 0 :(得分:28)
这不是Vista问题,而是64位Windows问题:名称 System32 实际上令人困惑,但这实际上是系统(64位)DLL所在的文件夹。
所以在任何64位版本的Windows上......
...所有 64位系统DLL位于C:\ Windows \ System32 。
...所有 32位系统DLL位于C:\ Windows \ SysWOW64 中。
该名称来自 W indows o n W indows 64 (WOW64)是转换层的名称,允许32位应用程序使用本机64位系统资源。
答案 1 :(得分:8)
Raymond Chen最近解决了为什么32-bit system directories are weird on 64-bit Windows背后的基本原因。该条目的第一段确实是理解隔离的32位目录背后原因的关键:
在64位Windows上,运行32位程序 在仿真层...如果是32位 程序试图查看系统, 它会看到一个32位系统。
我认为你必须有单独的目录才能使这些东西保持独立和有效。当您考虑WOW64表示Windows On Windows 64位时,看起来反直觉的SysWOW64名称对于文件所在的目录是更有意义的,这就是上面提到的仿真器。