为什么我的程序不能在Vista 64上找到它的DLL?

时间:2009-01-29 17:29:33

标签: delphi dll windows-vista 64-bit

我最近买了一台新笔记本电脑。不幸的是,它带有Vista。让它工作是一个很大的麻烦,并且comp有没有XP驱动程序的硬件组件,所以我不能“升级”到实际工作的操作系统。我大部分时间都在努力工作,但有一个特别奇怪的问题让我难过。

我安装了Delphi并尝试构建一个项目。它已编译,但不会运行。 “此应用程序无法启动,因为找不到sdl.dll。”很公平。所以我抓住SDL.dll并将其放在C:\windows\system32文件夹中。 (使用Vista 64位家庭高级版。这是一个32位的dll,所以我把它放在32个文件夹而不是64个。)

再次点击运行。同样的问题。但为什么?它就在哪里,对吗? C:\windows\system32位于系统路径中。任何人都知道为什么它无法链接到DLL?

(是的,我知道我可以通过将DLL放在与.exe相同的文件夹中来解决这个问题。我目前正在这样做作为一种解决方法。但从长远来看,这是一个坏主意,但是,因为我有一些不同的项目都需要SDL。)

2 个答案:

答案 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名称对于文件所在的目录是更有意义的,这就是上面提到的仿真器。