为什么在较新的Windows版本中仍然支持一些旧的Win16 API?

时间:2015-01-08 14:00:49

标签: windows winapi 64-bit legacy 16-bit

我最近在MoleBox打包的可执行文件上修复了一些IAT,并发现它与kernel32函数链接:'_ _ lpen','_ lwrite'和'_lread'。此site表示提供这些API是为了与16位版本的Windows兼容。我不希望'Win16'应用程序无法在长模式下执行(是的 - 我正在运行Win8.1 x64) - 那么那些仍然包含在'kernel32.dll'中的目的是什么?

顺便说一句,这些功能甚至不包含在'msdn'库中。

编辑:似乎这些功能实际上并不是16位!他们在堆栈上采用32位参数。

2 个答案:

答案 0 :(得分:7)

并不是16位应用程序可以调用这些函数。显然他们不能,因为他们生活在32位和64位模块中。关键是让开发人员更容易编译旧程序而不必重新编写它们。

现在,2015年并没有真正需要满足他们希望重新编译的16位程序的开发人员。这可能不再发生在任何重要的水平上。但如果你把时钟倒退20年,那么这真的是一个问题。因此MS包括这些compat拐杖。一旦它们被包括在内,那么MS可能决定将它们留在那里,以免破坏二进制兼容性。 MS确实竭尽全力避免破坏旧程序。如果要删除这些功能,任何依赖它们的程序都会破坏。

答案 1 :(得分:1)

微软并没有删除功能"只是因为"他们已经老了。他们会在需要重新实现时立即删除这些功能,但是现在保留这些功能的工作量较少。