windows - 为什么较新的 Windows 版本仍支持某些旧的 Win16 API?

标签 windows winapi 64-bit legacy 16-bit

我最近在 MoleBox 打包的可执行文件上修复了一些 IAT,发现它链接了 kernel32 函数:'_lopen'、'_lwrite' 和 '_lread'。这site声明提供这些 API 是为了与 16 位版本的 Windows 兼容。我不知道“Win16”应用程序不能在长模式下执行(是的 - 我正在运行 Win8.1 x64)- 那么那些仍然包含在“kernel32.dll”中的目的是什么?

顺便说一下,这些函数甚至没有包含在“msdn”库中。

编辑:看起来这些函数实际上并不是 16 位的!他们在堆栈上获取 32 位参数。

最佳答案

并不是说函数可以被16位应用程序调用。显然他们不能,因为他们生活在 32 位和 64 位模块中。重点是(曾经)让开发人员更容易编译旧程序而无需重新编写它们。

现在,在 2015 年,没有真正需要满足拥有 16 位程序并希望重新编译的开发人员的需求。这可能不会再发生任何显着水平。但如果时光倒流 20 年,那么这才是真正令人担忧的问题。因此 MS 包括这些兼容的拐杖。一旦包含了它们,MS 可能决定将它们留在那里以免破坏二进制兼容性。 MS 确实竭尽全力避免破坏旧程序。如果删除这些功能,任何依赖它们的程序都会中断。

关于windows - 为什么较新的 Windows 版本仍支持某些旧的 Win16 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27841903/

相关文章:

c++ - 我的代码在 Windows XP 上不工作

delphi - 为什么将此汇编代码移植到 x64 时会出现访问冲突?

c++ - 为什么我的程序在 nVidia NView 下占用 100% CPU?

windows - TThread 等待用户输入

python - 在另一个驱动器上创建 virtualenv - 访问被拒绝

c# - 直接打印时 GhostScript 挂起

c++ - 如何从 Adob​​e AIR 应用程序获取 HDC 或屏幕截图?

winapi - TextOutW 在屏幕上与打印机上的显示不同

assembly - 如何将 Vtune 分析限制为特定函数

内存寻址