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