windows - 确保为 32 位 Windows 编写的程序与 64 位 Windows 兼容

标签 windows 64-bit backwards-compatibility

虽然我的理解是没有根本原因为 32 位硬件/操作系统编写的程序不能在 64 位硬件/操作系统上运行,但在实践中,我发现许多程序适用于 32 位版本的 Windows这不适用于 64 位版本的 Windows。示例包括许多流行的安全实用程序(大多数产品来自 Norton 和 Check Point 的 Zone Alarm)和几款游戏(我一直试图让 Grand Theft Auto 4 运行几周,但无济于事 - 当然,这可能与 GTA4 相关的许多其他问题有关,但既不存在也不存在)。

我听说程序不兼容的原因可能很简单,例如不想从“Program Files (x86)”文件夹运行,但还有哪些其他原因?为什么为 32 位系统编写的病毒扫描程序或防火墙不能在 64 位系统上运行?理论上一切都向后兼容时,为什么游戏无法运行?

最佳答案

关于这个话题有很多错误信息。

当 32 位应用程序在 64 位 Windows 上运行时:

  • 大多数兼容性问题都是在应用程序尝试安装内核模式驱动程序时出现的。 64 位操作系统无法安装 32 位驱动程序。这肯定是防火墙的问题。它正在尝试连接到 TCP/IP 驱动程序堆栈。
  • 没有模拟器! 32 位目标代码由 cpu 完全 native 全速执行。
  • 不支持旧的 16 位代码。这破坏了很多安装程序。
  • 访问正确的文件夹通常不是问题。当 32 位程序在 %windir%\system32\中打开文件时,操作系统会自动将其重定向到 %windir%\syswow64。注册表的某些部分也是如此。这里有一些潜在的陷阱,但它们通常是假设各种 WINAPI Get...Directory() 函数返回与 Windows 95 中相同的字符串。
  • 无论它是 10 年前还是昨天编译的,C/C++ 指针仍然是 32 位(4 字节),并且所有的代码都假定是 32 位(4 字节)——包括 SendMessage()! - 仍然有效。在您开始转换为 64 位编译器之前,不会出现 8 字节指针问题。

关于windows - 确保为 32 位 Windows 编写的程序与 64 位 Windows 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394521/

相关文章:

c++ - 加载自定义 DLL 而不是原始 DLL

c# - Entity Framework 在 x64 和 x86 上的启动速度要慢得多

c++ - x64 进程在 4GB RAM 上可以占用多少内存

c++ - 扩展现有 API : Use default argument or wrapper function?

ruby - 在 Ruby 1.8 中支持 Ruby 1.9 的哈希语法

windows - Chef-Client 尝试在 Windows 上安装 Java,但它已经安装

c# - 如何检查 Windows 当前是否显示忙碌光标?

windows - hg pull 是否只对当前工作目录进行操作?

python - 64 位机器的 psyco 替代品

c++ - gcc 和 libstdc++ 向前兼容