在Windows XP上运行32位程序

问题描述:

Rad Studio XE3有一个问题:我的程序(32位)定期在我的机器上运行(Windows 7-64位),但是当我尝试运行“xp模式“出现以下错误消息:”找不到KERNEL32.dll库中Wow64RevertWow64FsRedirection的入口点“。在Windows XP上运行32位程序

我必须在计算机上运行它,32位,安装xp。

在此先感谢。

+0

这是我见过最糟糕的一段时​​间。 *关于通用计算硬件和软件的问题与Stack Overflow无关。*的确如此。但关于为什么调用Win32 API函数无法解决的问题非常多。关闭选民,对你感到羞耻! –

Wow64RevertWow64FsRedirection函数仅在Win64系统上可用。

最低支持的客户端 Windows Vista中,Windows XP专业x64版[桌面应用程序仅]

它不是东西,是在Delphi的RTL和VCL任何地方使用,所以它的东西,你的代码(或您正在使用的第三方组件或库)正在执行。

为了使应用程序与32位版本的Windows兼容,您需要将其删除(以及任何其他64位唯一函数)。

+0

好的谢谢你的回复。 – user2377071

WOW64文件系统重定向仅在WOW64下运行时才有意义。因此,该函数仅适用于在64位系统上运行的32位进程,即在WOW64下运行。该函数适用于64位进程,但始终失败(返回FALSE)。该功能在32位系统上不可用。

因此,如果您希望程序在32位操作系统上运行,则不得使用该函数的加载时链接。如果你从64位进程调用它,你必须期望它失败。

如果要禁用文件系统重定向,那么你应该:

  1. 使用运行时链接。这是拨打GetModuleHandle('kernel32')GetProcAddress()
  2. 添加代码以处理GetProcAddress()可能返回NULL的事实。在这种情况下,您只需跳过禁用文件系统重定向的调用。
  3. 如果进程是64位,跳过调用以禁用文件系统重定向,因为它们总是失败。

现在,也有极少数场景中禁用文件系统重定向是合适的。一般来说,根据我的经验,如果开发人员足够认识这种情况,那么他们也足够了解上面列出的三点。所以,我认为你的代码根本不应该禁用文件系统重定向。我想知道是否有更好的解决方案,导致您禁用文件系统重定向

+0

有时候人们会花很多时间爬过墙壁,而不是离开一小段距离 –